据我了解,params
只是语法糖,“引擎盖下”只是给你一个你指定类型的数组。
首先,你什么时候使用它?
其次,为什么要使用它而不只是声明一个数组参数?
答案 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));