首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#函数参数数组与列表

C#函数参数数组与列表
EN

Stack Overflow用户
提问于 2015-04-27 12:38:58
回答 6查看 4.5K关注 0票数 4

我正在编写一个简单的C#类,它在特定的竞赛中处理SQL查询。大多数查询都是带有3-4参数的SELECT语句,应该正确转义,因此函数如下所示

代码语言:javascript
复制
public DataTable Select(string query, string[] parameters) {
    # some code
}

parametersArray还是List<>?在选择这两种类型作为函数参数时是否有最佳做法,还是仅仅是首选项的问题?

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-04-27 12:41:05

您应该使用IEnumerable,因为listarray都实现了这一点。

代码语言:javascript
复制
public DataTable Select(string query, IEnumerable<string> parameters)

它们还实现了IListICollection,这可能提供其他有用的属性,如Tim在评论中所示。

票数 14
EN

Stack Overflow用户

发布于 2015-04-27 12:44:11

根据鲁棒性原理或Postel定律 (强调地雷):

在你所做的事情上要保守,在你从别人那里接受的东西上要自由。

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

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

在这种情况下:

  • 如果您所需要做的就是遍历参数集合,那么您应该要求用户提供一个可以迭代的类型的实例:在本例中,该实例是IEnumerable<T>
  • 如果您需要添加/删除项,那么ICollection<T>将是最自由的选项。
  • 如果出于某种原因,您需要按索引访问项,那么您应该需要一个IList<T>
票数 6
EN

Stack Overflow用户

发布于 2015-04-27 12:52:07

在nvoig所说的基础上,我会:

代码语言:javascript
复制
public DataTable Select(string query, params string[] parameters)
{
    return Select(query, (IEnumerable<string>)parameters);
}

public DataTable Select(string query, IEnumerable<string> parameters)
{
    return null;
}

因此,如果您有一个“静态”查询,您可以使用第一个重载(因为您在编译时知道参数的数量),而如果您有一个“动态”查询,则可以在string[]List<string>或LINQ表达式的结果中使用第二个重载。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29896045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档