今天我正在构造函数中创建一个默认参数值。
public SomeClass (String something = String.Empty)
{
// ...
}
编译器报错。
"something"的默认参数值必须是编译时常量。
我原以为String类中的Empty是编译时常量。
.field public static initonly string Empty
我是否误解了编译时常量的意义,还是只是需要接受更多奇怪的东西?
今天我正在构造函数中创建一个默认参数值。
public SomeClass (String something = String.Empty)
{
// ...
}
编译器报错。
"something"的默认参数值必须是编译时常量。
我原以为String类中的Empty是编译时常量。
.field public static initonly string Empty
我是否误解了编译时常量的意义,还是只是需要接受更多奇怪的东西?
static readonly
字段不是编译时常数,而只是一个静态字段,在其所在的类完成初始化后不应更改。
在当前的 .net 实现中,您甚至可以使用反射来更改它,这会导致非常奇怪的行为。
您可以使用""
代替,作为字符串文字是编译时常数。
readonly
字段是一个运行时常量。它在对象(或类,如果字段是 static
)初始化之前不会绑定到值。
编译时常量是字面量(例如 ""
- 实际上与 String.Empty
是相同的东西)和任何标记为 const
的内容。