根据我的理解,params
只是语法糖,"在底层"只是简单地为您提供指定类型的数组。
首先,什么时候使用这个?
第二,为什么要使用它而不是仅仅声明一个数组参数?
Math.Min
接受两个参数。这是一个愚蠢的限制。许多其他语言允许这样写:
double x, y, z, w;
double least = min(x, y, z, w);
如果你想写一个可以这样使用的min
函数,你会想用params
可以在String.Format()
这样的方法中找到一个明显的例子。使用参数的语句很容易理解:
string.Format("Your name is {0}, {1}", lastName, firstName);
但是如果没有参数,这就有点困难了:
string.Format("Your name is {0}, {1}", new string[] { lastName, firstName });
我发现自己使用参数很多字符串函数像这样。我使用它只是为了提高代码的可读性
我使用它的一种方式是将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)});
当你遇到需要可变数量参数的情况时,它是很好的
基类库中的一个示例是String.Split(params char[] separator)
,允许您编写,例如:
var segs = myString.Split(',',';',' ');
而不是
var sets = myString.Split(new char[] {',', ';', ' '});
我发现自己使用参数的主要原因是在执行存储过程时。
假设一个数据库中有几百个存储过程。那么你真的只有两个选择
1:为每个存储过程单独编写代码,这将花费数月时间
2:创建一个通用的执行器方法,该方法可以运行任何存储过程并接受任意编号&参数类型,例如
databaseHelper.ExecuteStoredProcedure(
"myStoredProecdure",
DbProviderHelper.StringParameter("@parameter_string", somestring),
DbProviderHelper.BoolParameter("@parameter_string", somebool),
DbProviderHelper.IntParameter("@parameter_int", someint));