繁体   English   中英

params 关键字是否保证项目与列出的顺序相同?

[英]Does the params keyword guarantee items to be in the same order as they are listed?

我正在研究一个简单的 API,它将接受许多 IBehaviours,然后将其应用于配置。 我正在使用 params 关键字进行设计,因为通常只需要一种行为,但有时更多。

但是,以正确的顺序应用行为非常重要。

public void Configure(string wow, params IBehaviour[] behaviours) { ... }

Configure("oh yes", new MustHappenFirst(), new MustHappenSecondly());

做这个

  1. 技术上暗示behaviours在枚举时以相同的顺序发生? (如在标准方面,而不仅仅是在实际方面)。

  2. 语义和直观地传达相同的行为?

谢谢。

arguments 的评估将按从左到右的顺序进行,它们将按该顺序放入数组中。

请注意,如果“null”是行为的有效值,您可能会遇到麻烦:

Configure("hello", null);

来电

Configure("hello", (IBehaviour[]) null);

不是

Configure("hello", new IBehaviour[1] { null } );

所以要小心。

是的。 当您使用params时,编译器只是将 arguments 转换为数组,其顺序与程序中列出 arguments 的顺序相同。 它们将始终按此顺序排列在方法内部。

致电:

Configure("wow", one, two, three);

将始终 map 到:

Configure("wow", new[] {one, two, three});

是的。 使用 params 关键字为方法指定的参数将按照它们在方法调用中指定的顺序放置在 params 数组中。 对于熟悉使用参数的方法(如 String.Format)的开发人员来说,这通常是这样理解的,其中参数列表中格式化值的顺序非常重要。

  1. 是的; 订单被保留。

  2. 是的; 这可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM