C# params关键字是否保证项目的顺序与列出的顺序相同?
我正在开发一个简单的API,该API将接受大量ibehaviour,然后将这些ibehaviour应用到配置中。我使用params关键字设计它,因为通常只需要一种行为,但有时需要更多 然而,按照正确的顺序应用行为是非常重要的C# params关键字是否保证项目的顺序与列出的顺序相同?,c#,communication,params,C#,Communication,Params,我正在开发一个简单的API,该API将接受大量ibehaviour,然后将这些ibehaviour应用到配置中。我使用params关键字设计它,因为通常只需要一种行为,但有时需要更多 然而,按照正确的顺序应用行为是非常重要的 public void Configure(string wow, params IBehaviour[] behaviours) { ... } Configure("oh yes", new MustHappenFirst(), new MustHappenSecon
public void Configure(string wow, params IBehaviour[] behaviours) { ... }
Configure("oh yes", new MustHappenFirst(), new MustHappenSecondly());
是这样吗
行为
在以下情况下以相同的顺序发生:
列举?(就标准而言,
不只是实际的明智)谢谢。是的。使用
params
时,编译器只需将参数转换为数组,顺序与程序中列出的参数相同。在方法中,它们将始终按此顺序排列
呼吁:
Configure("wow", one, two, three);
将始终映射到:
Configure("wow", new[] {one, two, three});
对。为使用params关键字的方法指定的参数将按照在方法调用中指定的顺序放置在params数组中。开发人员通常会理解这一点,他们熟悉使用String.Format等方法的参数,其中参数列表中格式化值的顺序非常重要。参数的求值将按从左到右的顺序进行,并按该顺序放入数组中 请注意,如果“null”是行为的有效值,您可能会遇到麻烦:
Configure("hello", null);
召唤
不是
所以要小心。我相信参数是按照方法调用中给出的相同顺序转换为数组的。“将发生在从左到右”是非常明显的,但它是否也在规范中的某个地方被确定下来(如未来证明)?“我找不到它。@亨克:一般来说,C#中的每个表达式都是按从左到右的顺序计算的。”。您需要的特定部分是7.5.1.2“参数列表的运行时评估”
Configure("hello", (IBehaviour[]) null);
Configure("hello", new IBehaviour[1] { null } );