C#函数参数Array vs List

Nai*_*gel 3 c# arrays parameters function list

我正在编写一个简单的C#类来处理特定竞赛中的SQL查询.大多数查询将是SELECT3-4个参数的语句,应该正确转义,所以函数将是这样的

public DataTable Select(string query, string[] parameters) {
    # some code
}
Run Code Online (Sandbox Code Playgroud)

应该parameters是一个Array还是一个List<>?在这两种类型作为功能参数进行选择时是否有一些最佳实践,还是只是偏好问题?

PS我通常更喜欢List<>因为灵活性,但在这里创造一个动态的可能性Array是一个好点.

Say*_*yse 11

您应该使用IEnumerable,然后它可以是两者listarray实现它

public DataTable Select(string query, IEnumerable<string> parameters)
Run Code Online (Sandbox Code Playgroud)

他们也都实现IListICollection,可能提供其他有用的特性在评论中所示添Schmelter

  • 你的意思是IEnumerable <string> (4认同)
  • 如果他想要只包含所提到的数组或列表,他应该使用`IList <string>`.然后你仍然可以通过索引访问它们而不进行强制转换,并使用`Count`属性(是的,数组有). (2认同)

dca*_*tro 5

根据鲁棒性原则,或 Postel 定律(强调我的):

做事要保守,从别人那里接受的要自由

换句话说,尽可能使用“最广泛”的类型,即继承层次结构中较高的类型,以便:

  1. 尽可能少地要求用户,
  2. 并给用户尽可能多的选择。

在这种情况下:

  • 如果您需要做的只是迭代参数集合,那么您应该要求用户提供一个可以迭代的类型的实例:在这种情况下,是IEnumerable<T>.
  • 如果您需要添加/删除项目,那么ICollection<T>将是最自由的选择
  • 如果出于某种原因,您需要按索引访问项目,那么您应该要求一个IList<T>.