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?
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 .
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.
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
.
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 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.