Als Abhilfe, können Sie einen Feldinitialisierer anstelle einem const verwenden, dh
static readonly string blah = "blah " + MyEnum.Value1;
static readonly string bloh = "bloh " + (int)MyEnum.Value1;
Was, warum: für den Enum Fall Enum Formatierung eigentlich ziemlich komplex ist, vor allem für die [Flags]
Fall, so ist es sinnvoll, dies der Laufzeit zu überlassen. Für den Fall int
könnte dies möglicherweise noch von kulturspezifischen Problemen betroffen sein, also erneut: muss bis zur Laufzeit zurückgestellt werden. Was der Compiler tatsächlich erzeugt ein Kasten Betrieb hier, das heißt mit der string.Concat(object,object)
Überlastung, identisch mit:
static readonly string blah = string.Concat("blah ", MyEnum.Value1);
static readonly string bloh = string.Concat("bloh ", (int)MyEnum.Value1);
wo string.Concat
die .ToString()
zuführen. Als solche könnte man argumentieren, dass die folgende etwas effizienter ist (vermeidet eine Box und einen virtuellen Aufruf):
static readonly string blah = "blah " + MyEnum.Value1.ToString();
static readonly string bloh = "bloh " + ((int)MyEnum.Value1).ToString();
die string.Concat(string,string)
verwenden würde.
Als Vermutung dafür, warum: eine ganze Zahl verketten Kultur Abhängigkeitsprobleme beinhalten. Ihr 'int.ToString()' ist möglicherweise nicht mit meinem 'int.ToString()' identisch. Vielleicht. Nur eine Vermutung. Insbesondere negative Zahlen, vielleicht. –
oh, richtig, ich habe die Frage nicht genau gelesen. Es geht also nicht nur um Enums, es ist auch unmöglich, const-ganze Zahlen in eine const-Zeichenkette einzuschließen. – Zonko
ja; 'const String foo =" abc "+ 1;' schlägt identisch –