C#变长args,这更好,为什么:__ arglist,params数组或Dictionary <T,K>?

mke*_*y33 8 c# c#-3.0 c#-2.0

我最近阅读了以下溢出帖子: 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)

Joh*_*ers 9

我绝对不会使用__arglist,因为它没有文档,没有人知道它在任何情况下意味着什么.

我还会尽可能地避免使用可变长度的参数列表,而是重新设计我的设计以了解真正的变量,并以较少的平台依赖方式对变量进行建模.

  • 一个是永远不会被使用,一个是数组,一个是字典.所有这些往往都是设计不佳的标志. (2认同)
  • 哈哈哈,好的,所以我看到你站在那个地方.我只是好奇什么时候比另一个更受欢迎.我完全清楚他们的类型.我正在寻找更深入的解释.感谢您批评使用其中任何一种.我同意100%,但有时我们会与他人互动,从事糟糕的设计,咬紧牙关,并希望最好! (2认同)