什么是何时使用params作为方法参数的真实示例?

时间:2011-04-28 17:35:42

标签: c# .net params-keyword

据我了解,params只是语法糖,“引擎盖下”只是给你一个你指定类型的数组。

首先,你什么时候使用它?

其次,为什么要使用它而不只是声明一个数组参数?

5 个答案:

答案 0 :(得分:8)

Math.Min只有两个参数。这是一个愚蠢的限制。许多其他语言允许你写:

double x, y, z, w;
double least = min(x, y, z, w);

如果您想编写可以像这样使用的min函数,则需要使用params

答案 1 :(得分:5)

一个明显的例子可以在像String.Format()这样的方法中找到。使用params的这个陈述很容易理解:

string.Format("Your name is {0}, {1}", lastName, firstName);

但是如果没有params,那就更困难了:

string.Format("Your name is {0}, {1}", new string[] { lastName, firstName });

我发现自己使用params很多这样的字符串函数。我只是为了提高代码的可读性而使用它。

答案 2 :(得分:3)

我使用它的一种方法是将sql查询传递给我的包装类。我将有一些带有可变数量参数的sql。这样我就可以列出我用查询发送的所有参数,而不是先创建一个数组。

    SQLWrapper.Query(" some sql with parameters", new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1),
                                                  new SqlParameter("@param1", val1));

比其他选择更好:

SQLWr

apper.Query(" some sql with parameters", new SqlParameter[]{new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1),
                                                      new SqlParameter("@param1", val1)});

当你遇到需要可变数量参数的情况时,很高兴。

答案 3 :(得分:2)

基类库中的一个示例是String.Split(params char[] separator),允许您编写,例如:

var segs = myString.Split(',',';',' ');

而不是

var sets = myString.Split(new char[] {',', ';', ' '});

答案 4 :(得分:1)

我发现自己使用params的主要不漂亮/更容易理解的原因是执行存储过程。

假设您在数据库中有几百个存储过程。那你真的只有两个选择

1:为每个存储过程单独编写代码,这需要几个月

2:创建一个通用的执行程序方法,该方法将运行任何存储过程并采用任何数字&参数类型,例如

databaseHelper.ExecuteStoredProcedure(
                "myStoredProecdure",
                DbProviderHelper.StringParameter("@parameter_string", somestring),
                DbProviderHelper.BoolParameter("@parameter_string", somebool),
                DbProviderHelper.IntParameter("@parameter_int", someint));