5

据我了解,这params只是“幕后”的语法糖,只是为您提供了您指定类型的数组。

首先,你什么时候用这个?

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

4

5 回答 5

8

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

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

如果你想编写一个min可以这样使用的函数,你会想使用params.

于 2011-04-28T17:38:30.847 回答
5

一个明显的例子可以在类似的方法中找到String.Format()。这个使用 params 的语句很容易理解:

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

但如果没有参数,它会有点困难:

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

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

于 2011-04-28T17:41:43.287 回答
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)});

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

于 2011-04-28T17:41:14.320 回答
2

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

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

而不是

var sets = myString.Split(new char[] {',', ';', ' '});
于 2011-04-28T17:43:04.810 回答
1

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

以您在数据库中有数百个存储过程的情况为例。那你真的只有两个选择

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

2:创建一个通用执行器方法,它将运行任何存储过程并采用任意数量和类型的参数,例如

databaseHelper.ExecuteStoredProcedure(
                "myStoredProecdure",
                DbProviderHelper.StringParameter("@parameter_string", somestring),
                DbProviderHelper.BoolParameter("@parameter_string", somebool),
                DbProviderHelper.IntParameter("@parameter_int", someint));   
于 2011-04-28T17:53:23.533 回答