C# 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

我正在开发一个简单的API,该API将接受大量ibehaviour,然后将这些ibehaviour应用到配置中。我使用params关键字设计它,因为通常只需要一种行为,但有时需要更多

然而,按照正确的顺序应用行为是非常重要的

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 } );