作为一种解决方法,您可以使用字段初始值设定项而不是 const,即
static readonly string blah = "blah " + MyEnum.Value1;
static readonly string bloh = "bloh " + (int)MyEnum.Value1;
至于为什么:对于enum的情况,enum 格式化实际上是相当复杂的,尤其是对于这种[Flags]
情况,所以把它留给运行时是有意义的。对于这种int
情况,这仍然可能受到文化特定问题的影响,因此再次:需要推迟到运行时。编译器在这里实际生成的是一个框操作,即使用string.Concat(object,object)
重载,等同于:
static readonly string blah = string.Concat("blah ", MyEnum.Value1);
static readonly string bloh = string.Concat("bloh ", (int)MyEnum.Value1);
将在哪里string.Concat
执行.ToString()
. 因此,可以说以下方法效率更高(避免使用框和虚拟调用):
static readonly string blah = "blah " + MyEnum.Value1.ToString();
static readonly string bloh = "bloh " + ((int)MyEnum.Value1).ToString();
这将使用string.Concat(string,string)
.