回避策として、constの代わりにフィールド初期化子を使用できます。
static readonly string blah = "blah " + MyEnum.Value1;
static readonly string bloh = "bloh " + (int)MyEnum.Value1;
理由については、列挙型の場合、特に列挙型のフォーマットは実際にはかなり複雑な[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)
。