In C# möchte ich einen String-Wert mit einer leeren Zeichenfolge initialisieren.
Wie soll ich das machen? Was ist der richtige Weg, und warum?
string willi = string.Empty;
oder
string willi = String.Empty;
oder
string willi = "";
oder was?
In C# möchte ich einen String-Wert mit einer leeren Zeichenfolge initialisieren.
Wie soll ich das machen? Was ist der richtige Weg, und warum?
string willi = string.Empty;
oder
string willi = String.Empty;
oder
string willi = "";
oder was?
Verwenden Sie das, was für Sie und Ihr Team am lesbarsten ist.
Andere Antworten besagen, dass jedes Mal eine neue Zeichenkette erstellt wird, wenn Sie die ""
. Das stimmt nicht - aufgrund des String-Internings wird er entweder einmal pro Assembly oder einmal pro AppDomain (oder möglicherweise einmal für den gesamten Prozess - da bin ich mir nicht sicher) erstellt. Dieser Unterschied ist vernachlässigbar - massiv, Massiv unbedeutend.
Welche Sie als lesenswerter empfinden, ist jedoch eine andere Frage. Das ist subjektiv und variiert von Person zu Person - ich schlage also vor, dass Sie herausfinden, was die meisten Leute in Ihrem Team mögen, und sich dann aus Gründen der Konsistenz daran orientieren. Persönlich finde ich ""
leichter zu lesen.
Das Argument, dass ""
y " "
leicht miteinander verwechselt werden können, finde ich nicht besonders gut. Es sei denn, Sie verwenden eine Proportionalschrift (und ich habe nicht mit jede Entwickler, die das tun), ist der Unterschied ziemlich leicht zu erkennen.
Von der Leistung und der Codegenerierung her gibt es eigentlich keinen Unterschied. Bei den Leistungstests ging es hin und her, wer schneller war als der andere, und das nur um Millisekunden.
Wenn man sich den Code hinter den Kulissen anschaut, sieht man eigentlich auch keinen Unterschied. Der einzige Unterschied liegt in der AWL, die string.Empty
den Opcode verwenden ldsfld
y ""
verwendet den Opcode ldstr
aber nur, weil string.Empty
ist statisch, und beide Anweisungen bewirken das Gleiche. Wenn Sie sich die erzeugte Baugruppe ansehen, ist es genau dasselbe.
private void Test1()
{
string test1 = string.Empty;
string test11 = test1;
}
private void Test2()
{
string test2 = "";
string test22 = test2;
}
.method private hidebysig instance void
Test1() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test1,
[1] string test11)
IL_0000: nop
IL_0001: ldsfld string [mscorlib]System.String::Empty
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test1
.method private hidebysig instance void
Test2() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test2,
[1] string test22)
IL_0000: nop
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test2
string test1 = string.Empty;
0000003a mov eax,dword ptr ds:[022A102Ch]
0000003f mov dword ptr [ebp-40h],eax
string test11 = test1;
00000042 mov eax,dword ptr [ebp-40h]
00000045 mov dword ptr [ebp-44h],eax
string test2 = "";
0000003a mov eax,dword ptr ds:[022A202Ch]
00000040 mov dword ptr [ebp-40h],eax
string test22 = test2;
00000043 mov eax,dword ptr [ebp-40h]
00000046 mov dword ptr [ebp-44h],eax
Der beste Code ist gar kein Code :
Es liegt in der Natur des Programmierens, dass wir als Programmierer erkennen müssen, dass jede Entscheidung, die wir treffen, einen Kompromiss darstellt. [ ] Beginnen Sie mit der Kürze. Erhöhen Sie die anderen Dimensionen, wie es die Tests erfordern.
Folglich ist weniger Code besserer Code: Bevorzugen Sie ""
a string.Empty
o String.Empty
. Diese beiden sind sechsmal länger ohne zusätzlichen Nutzen - und schon gar nicht ohne zusätzliche Klarheit, da sie genau dieselbe Information ausdrücken.
Ein Unterschied besteht darin, dass Sie bei Verwendung einer switch-case
Syntax, können Sie nicht schreiben case string.Empty:
weil es sich nicht um eine Konstante handelt. Sie erhalten eine Compilation error : A constant value is expected
Unter diesem Link finden Sie weitere Informationen: string-empty-versus-empty-quotes
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.