Unterschied zwischen "String" und "String" in .NET und welche ist am besten?

14

In .NET Framework gibt es mindestens in der C # -Sprache zwei "Versionen" des Zeichenfolgentyps:

  • "string"
  • "String"

Es scheint, dass sie austauschbar sind, aber sind sie wirklich? Wenn sie nicht austauschbar sind, ist es im Allgemeinen besser, eine anstelle der anderen zu verwenden, und unter welchen Umständen?

Cyberherbalist
quelle
1
Ähnlich wie bei dieser Frage: stackoverflow.com/q/6000517/6504
Agent_9191
2
Stilistisch tendiere ich dazu, die Kleinbuchstabenversion zu verwenden, wenn ich mich auf den Typ beziehe, und die Großbuchstabenversion, wenn ich eine statische Methode von System.String aufrufe.
Joel Mueller
4
Identisch mit stackoverflow.com/questions/7074/… .
zzzzBov
2
stringexistiert nicht in .net, es existiert nur in C #.
CodesInChaos
1
Auch wenn dies für Stack Overflow etwas geeigneter ist, ist es für Programmierer meines Erachtens kein Thema, und da Stack Overflow bereits über mindestens ein Duplikat verfügt, wäre es nicht sinnvoll, dies zu migrieren. Hören Sie also bitte auf zu markieren / Voting schließen, um zu migrieren. Wenn Sie der Meinung sind, dass dies geschlossen sein sollte, ist das cool, aber es sollte geschlossen und nicht migriert sein.
Yannis

Antworten:

30

Naja laut MSDN

string ist ein Alias ​​für String in .NET Framework.

Wo "String" ist in der Tat System.String.

Ich würde sagen, dass sie austauschbar sind und es keinen Unterschied gibt, wann und wo Sie die eine oder andere verwenden sollten.

Es wäre jedoch besser, mit demjenigen übereinzustimmen, den Sie verwendet haben.

ChrisF
quelle
Aus irgendeinem Grund hatte ich das Gefühl, dass String ein Klassenwrapper um einen Wert ist, der mit einem String geschrieben wurde, und dies führt zu der Idee des Boxens ... irre ich mich hier total?
Aaron Anodide
1
@ Gabriel Nein, String(und daher auch stringnach Alias) sind Referenztypen.
Kris Harper
@ Gabriel: Macht Java das nicht mit Sachen wie Byte gegen Byte?
Whatsisname
Gilt das auch für Double vs. Double und andere Datentypen?
Gavin Coates
1
@AaronAnodide Ich glaube, das ist eine Java-Konvention, von der Sie wahrscheinlich schon gehört haben.
KChaloux
20

Wie bereits erwähnt, sind sie dasselbe und stringnur ein Pseudonym für String.

Für das, was es wert ist, benutze ich, stringum Typen zu deklarieren - Variablen, Eigenschaften, Rückgabewerte und Parameter. Dies steht im Einklang mit der Verwendung anderer Systemtypen - int, bool, varusw. (obwohl Int32und Booleanist auch richtig).

Ich benutze Stringbei der Verwendung der statischen Methoden für die String-Klasse wie String.Split()oder String.IsNullOrEmpty(). Ich halte dies für sinnvoller, da die Methoden zu einer Klasse gehören und damit im Einklang stehen, wie ich andere statische Methoden verwende.

Kirk Broadhurst
quelle
Wir verwenden diese Konvention auch bei der Arbeit, und ich mag es. Mein Gehirn stellt automatisch die Verbindung her.
SBI
4

Ich würde vorschlagen, Kleinbuchstaben zu verwenden string. In Großbuchstaben Stringwird die erste Klasse mit dem Namen String verwendet, die in den importierten Namespaces gefunden wird System.String. Dies ist im Allgemeinen der Fall . Es ist möglich, dass stattdessen Ihre eigene String-Klasse verwendet wird.

Bryan Boettcher
quelle
3
Wenn Sie zwei verschiedene importierte Typen mit demselben Namen haben und diesen Namen ohne Namespace-Qualifikation verwenden, wird eine Fehlermeldung angezeigt.
Svick
Es ist möglich zu Stringarbeiten, es ist nie möglich zu tricksen string.
Bryan Boettcher
Trotzdem denke ich nicht, dass das ein guter Grund ist, ihn zu benutzen string.
Svick
5
Wie ist "man könnte brechen" vs. "man wird niemals brechen", wenn alles andere identisch ist, was nicht gut genug ist?
Bryan Boettcher
4

string ist ein C # -Schlüsselwort, das einfach ein Alias ​​für das ist System.String

..aber da es sich um ein Schlüsselwort handelt, wird es in Ihrem Syntax - Farbeditor / Ihrer IDE in Schlüsselwortfarbe angezeigt, genau wie int, double, if, else usw. Stilistisch könnten Sie es vorziehen, das Schlüsselwort anstelle des System.StringTyps (oder kurz Stringdanach) zu verwenden du hast getan using System;).

Dies ist ein Nischen Punkt obwohl, wie obwohl bool, char, int, doubleund stringsind alle Keyword - Aliase für Systemtypen, stringeine ungerade-one-out , wie es ein Referenztyp ist und die anderen sind Werttypen.

JBRWilkinson
quelle
4
objectist auch ein Keyword-Alias ​​für einen Referenztyp
nikie
Oh ja, ich habe alles vergessen - danke für die Erinnerung.
JBRWilkinson
2

stringist nur ein Pseudonym für String, sie sind letztendlich gleich.

Sie können verwenden, was Sie bevorzugen, obwohl ich im Allgemeinen verwenden string , wenn ich es auf der Verwendung ähnlich wie bei einem primitiven Datentyp (ähnlich bin die Planung int, floatoder bool) und Stringwenn ich Planung auf mich als Objekt / Klasse. Beispielsweise:

string foo = "   ";
if (String.isNullOrWhitespace(foo)) 
{
    // ...
}

Im obigen Fall habe ich vor, fooeinfach Text zu speichern (effektiv als Grundelement), also verwende ich string; wenn ich aber anrufe String.isNullOrWhitespace(string)benutze ich String. Ich mache das, weil im Allgemeinen der erste Buchstabe von Klassennamen groß geschrieben wird ( String), während der erste Buchstabe von Primitiven (wie zint ) nicht.

BBB
quelle
-2

String wird mit dem Namespace System.String verwendet, String wird mit der C # -Compilerspezifikation verwendet, außerdem ist System.String der Referenztypwert. Es wird bevorzugt, mit Systemobjekten umzugehen, Zeichenfolgen nur für literale Zwecke. System und System funktionieren beide gleich.

string TC = new System.String('/', 5);

String wird auch zum Vergleichen, Gleichstellen und für andere Zwecke verwendet.

Anjan Kant
quelle
4
dies scheint nicht zu bieten alles wesentliche über vor 6 Antworten
gnat