我最近阅读了以下溢出帖子: C#的隐藏功能
其中一个特征是arglist.为什么选择这个或替代方法作为对方法使用可变长度参数列表的方法?另外,请注意我可能不会在我的代码中使用这种构造,除非有必要这样做.这更像是一个语义问题,而不是甚至使用可变长度参数是否实际或谨慎.那么有谁知道哪个更好,为什么?
[Test]
public void CanHandleVariableLengthArgs()
{
TakeVariableLengthArgs(__arglist(new StringBuilder(), 12));
object[] arr = { new StringBuilder() };
TakeVariableLengthArgs2(arr);
TakeVariableLengthArgs3(
new Dictionary<string, object>
{ { "key", new StringBuilder() } });
}
public void TakeVariableLengthArgs(__arglist)
{
var args = new ArgIterator(__arglist);
var a = (StringBuilder)TypedReference.ToObject(args.GetNextArg());
a.Append(1);
}
public void TakeVariableLengthArgs2(params object[] args)
{
var a = (StringBuilder)args[0];
a.Append(1);
}
public void TakeVariableLengthArgs3(Dictionary<string, object> args)
{
var a = (StringBuilder)args["StringBuilder"];
a.Append(1);
}
Run Code Online (Sandbox Code Playgroud)
我绝对不会使用__arglist,因为它没有文档,没有人知道它在任何情况下意味着什么.
我还会尽可能地避免使用可变长度的参数列表,而是重新设计我的设计以了解真正的变量,并以较少的平台依赖方式对变量进行建模.
归档时间: |
|
查看次数: |
12760 次 |
最近记录: |