C# 和接受参数






4.29/5 (15投票s)
C# 提供了一些额外的关键字,允许你为方法接受多个参数。本文将介绍使用 'params' 关键字和邪恶的 '__arglist' 关键字。
你是否曾经编写过类似下面的函数——传递一个值的数组?
public void UpdateList(string[] list) {
//...etc...
}
这种方法并不常见,但你知道你可以进一步简化它吗?
params 关键字
params
关键字是方法参数的一个有趣的修饰符。它允许用户传递单个值,而不是使用数组本身。
public void ProcessList(params string[] args) {
//...etc...
}
//old way still works
ProcessList(new string[] { "a", "b", "c" });
//new way works as well
ProcessList("a", "b", "c");
你会注意到,你仍然可以像以前一样传递数组,但现在你可以一次添加一个参数。
params
关键字必须是方法中的最后一个参数,除此之外,没有其他限制。你可以像对待任何其他数组一样对待这个参数。
使用“纯粹的邪恶”传递更多参数
params
关键字在处理参数时给你提供了一点额外的灵活性,但你是否听说过 __argslist
关键字?
如果没有,那也没什么大不了的——你真的不应该经常使用它。
public static void CallArgList(__arglist) {
ArgIterator args = new ArgIterator(__arglist);
int total = args.GetRemainingCount();
for (int i = 0; i < total; i++) {
object value = TypedReference.ToObject(args.GetNextArg());
Console.WriteLine(
"Arg #{0}: {1} ({2})",
i,
value,
value.GetType()
);
}
}
//then used like...
CallArgList(
__arglist(
"Jim",
1,
false,
(new StringBuilder()).Append("howdy")
));
现在,这段代码看起来很奇怪,但更奇怪的是,它有效!我们现在能够将值传递到我们的方法中,而没有任何约束。
我真的不建议使用这个关键字。使用对象数组(使用 params)编写类似的方法,在执行速度上没有发现任何实际差异。 考虑到它不是一个常用的特性,其他开发者遇到它时很可能会先搜索 Google 才能继续。