为什么C#4.0中的可选参数需要编译时常量?

时间:2011-03-18 00:11:07

标签: c# .net optional-parameters

还有一种方法可以为可选方法参数使用运行时值吗?

3 个答案:

答案 0 :(得分:12)

可选参数必须是常量,因为它们是作为属性的值写出的。因此,它们继承了属性值具有的所有限制。

无法直接编码运行时值。但是,你可以接近以下模式

public void MyApi(SomeType type = null) {
  type = type ?? new SomeType();
  ...
}

答案 1 :(得分:5)

可选参数被编译到程序集中,因此(就像指定为const的任何内容一样)它们必须是编译时常量。

不,您不能将执行时间值用作可选参数。

答案 2 :(得分:5)

可选参数在编译时确定,如果调用参数太少的方法,则替换为方法。它们通过在方法的IL中为参数添加属性来处理。

因此,它们需要在编译时完全解析(两者都用于创建,因为它们是属性,但也是在使用时)。无法为可选方法参数使用运行时值。