Tom*_*duy 6 .net c# parameters methods
据我所知,C#允许只有方法的最后一个参数是"可变长度",例如:
T f(A a, params B[] b)允许,如果你有,A r; .... B x, y, z; ....你可以打电话给像f (r, x, y, z).为什么C#也没有定义类似的东西:
T f(params A[] a, params B[] b)
Run Code Online (Sandbox Code Playgroud)
Ed *_* S. 12
因为编译器如何知道第一个参数的变量参数何时停止?
请告诉我什么argOne,argTwo应该包含在方法体内:
void Foo( params object[] argOne, params object[] argTwo )
{
// whatever
}
Foo( 1, false, "Hello", new object(), 2.3 );
Run Code Online (Sandbox Code Playgroud)
因为确定何时实际允许这样的结构太复杂了.
(当呼叫明确时)
虽然可以创建一套好的规则,但它们会相当复杂且难以理解.人们最终会问为什么案例X不起作用,如果它有一个微妙的含糊不清.
例如:
objector 以外的类Enumobject是Delegate,也不是MulticastDelegate)sealed或必须是值类型(其中一些规则可以在呼叫站点强制执行)
在实践中,这样的特征会有很多限制,几乎一文不值.
因此,此功能将从-10,000点开始.
它还将创造一个全新的突破性变化类别.启封类型,添加隐式转换或其他看似微不足道的事情现在可能会破坏客户端代码.