799 Stimmen

In C#, sollte ich string.Empty oder String.Empty oder "" verwenden, um eine Zeichenfolge zu intitialisieren?

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?

24voto

John Rudy Punkte 36386

Ich wollte mich eigentlich nicht einmischen, aber ich sehe, dass hier einige falsche Informationen verbreitet werden.

Ich persönlich bevorzuge string.Empty . Das ist eine persönliche Vorliebe, und ich beuge mich dem Willen des Teams, mit dem ich zusammenarbeite, von Fall zu Fall.

Wie einige andere bereits erwähnt haben, gibt es überhaupt keinen Unterschied zwischen string.Empty y String.Empty .

Außerdem, und das ist eine wenig bekannte Tatsache, ist die Verwendung von "" vollkommen akzeptabel. Jede Instanz von "" wird in anderen Umgebungen ein Objekt erzeugen. Allerdings interniert .NET seine Zeichenketten, so dass künftige Instanzen dieselbe unveränderliche Zeichenkette aus dem internen Pool ziehen, und jeder Leistungseinbruch ist vernachlässigbar. Quelle: Brad Abrams .

17voto

Steve Punkte 208036

Dieses Thema ist ziemlich alt und lang, also entschuldigen Sie bitte, wenn dieses Verhalten bereits an anderer Stelle erwähnt wurde. (Und verweisen Sie mich auf die Antwort, die dies abdeckt)

Ich habe einen Unterschied im Verhalten des Compilers festgestellt, wenn Sie string.Empty oder doppelte Anführungszeichen. Der Unterschied zeigt sich, wenn Sie die mit string.Empty oder mit doppelten Anführungszeichen initialisierte String-Variable nicht verwenden.

Im Falle der Initialisierung mit string.Empty dann die Compiler-Warnung

CS0219 - The variable 'x' is assigned but its value is never used

wird nie ausgegeben, während man bei der Initialisierung mit doppelten Anführungszeichen die erwartete Meldung erhält.

Dieses Verhalten wird in dem Connect-Artikel unter diesem Link erläutert: https://connect.microsoft.com/VisualStudio/feedback/details/799810/c-warning-cs0219-not-reported-when-assign-non-constant-value

Grundsätzlich, wenn ich es richtig verstehe, wollen sie einem Programmierer erlauben, eine Variable mit dem Rückgabewert einer Funktion zu Debugging-Zwecken zu setzen, ohne ihn mit einer Warnmeldung zu belästigen, und deshalb haben sie die Warnung nur im Falle von kostanten Zuweisungen beschränkt und string.Empty ist keine Konstante, sondern ein Feld.

16voto

MidnightGun Punkte 970

Ich persönlich bevorzuge "", es sei denn, es gibt einen guten Grund für etwas Komplexeres.

15voto

Silviu Niculita Punkte 167

String.Empty y string.Empty gleichwertig sind. String ist der Name der BCL-Klasse; string ist sein C#-Alias (oder eine Abkürzung, wenn Sie so wollen). Dasselbe wie bei Int32 y int . 参照 die Dokumente für weitere Beispiele.

Soweit "" betroffen ist, bin ich mir nicht ganz sicher.

Ich persönlich verwende immer string.Empty .

15voto

RBT Punkte 20895

Ich habe einen einfachen Test mit der folgenden Methode in einer .NET v4.5 Konsolenanwendung durchgeführt:

private static void CompareStringConstants()
{
    string str1 = "";
    string str2 = string.Empty;
    string str3 = String.Empty;
    Console.WriteLine(object.ReferenceEquals(str1, str2)); //prints True
    Console.WriteLine(object.ReferenceEquals(str2, str3)); //prints True
}

Dies deutet darauf hin, dass alle drei Variablen, nämlich str1 , str2 y str3 obwohl sie mit unterschiedlicher Syntax initialisiert werden, auf dasselbe String-Objekt (mit der Länge Null) im Speicher verweisen.

Intern gibt es also keinen Unterschied. Und es läuft alles auf die Bequemlichkeit hinaus, welche Sie oder Ihr Team verwenden möchten. Dieses Verhalten der String-Klasse ist bekannt als String-Praktikum in .NET Framework. Eric Lippert hat einen sehr schönen Blog aquí die dieses Konzept beschreiben.

CodeJaeger.com

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.

Powered by:

X