我正在编写一个简单的C#类来处理特定竞赛中的SQL查询。大多数查询都是SELECT
语句,有3-4个参数应该正确转义,所以函数将是这样的
public DataTable Select(string query, string[] parameters) {
# some code
}
parameters
应该是Array
还是List<>
?在将这两种类型作为函数参数进行选择时是否存在一些最佳实践?还是仅仅是偏好问题?
P.S。我通常更喜欢List<>
,因为它具有灵活性但是在这里创建Array
的可能性是一个很好的观点。
答案 0 :(得分:11)
您应该使用IEnumerable,然后它可以是list
和array
实现此
public DataTable Select(string query, IEnumerable<string> parameters)
他们还实施IList
和ICollection
,这可能会提供Tim Schmelter在评论中显示的其他有用属性
答案 1 :(得分:3)
根据Robustness principle, or Postel's law(强调我的):
在你所做的事情上要保守,在你接受别人的事情上要自由
换句话说,使用“最广泛”类型,继承层次结构中更高的类型,以便:
在这种情况下:
IEnumerable<T>
。ICollection<T>
将是最自由的选项IList<T>
。答案 2 :(得分:2)
除了nvoig所说的,我会:
public DataTable Select(string query, params string[] parameters)
{
return Select(query, (IEnumerable<string>)parameters);
}
public DataTable Select(string query, IEnumerable<string> parameters)
{
return null;
}
这样,如果你有一个&#34;静态&#34;查询,你可以使用第一个重载(因为你知道在编译时参数的数量),而如果你有一个&#34;动态&#34;查询您可以使用string[]
或List<string>
的第二个重载或LINQ表达式的结果。
答案 3 :(得分:1)
就个人而言,我希望至少有一个重载让我能够传递一个params数组:
public DataTable Select(string query, params string[] parameters);
这将允许我用这样的参数调用它:
Select("SELECT FROM WHERE", "3", "17", "Joe");
任何拥有IEnumerable<>
的人都可以轻松传递它:
Select("SELECT FROM WHERE", myData.ToArray());
对我来说,这样做会更好。
答案 4 :(得分:0)
一般情况下,如果您只阅读序列,我会使用IEnumerable<T>
。
在这个特定的上下文中,我只使用params string[]
或甚至params object[]
类型,因为您可以像String.Format
一样使用它,即
var dt = Select("select A from Table where X=? and Y=?", value1, value2);
答案 5 :(得分:0)
如果您的参数具有相同的类型(此处为字符串),则可以将params关键字与字符串数组一起使用。
public DataTable Select(string query, params string[] parameters)
因此你可以像下面那样调用它
Select(myQuery, param1, param2, ...);