7569 Stimmen

Was ist der Unterschied zwischen String und String in C#?

Beispiel ( den Fall beachten ):

string s = "Hello world!";
String s = "Hello world!";

Wie lauten die Leitlinien für die Verwendung der einzelnen Mittel? Und was sind die Unterschiede?

139voto

Lloyd Cotten Punkte 4306

Wie die anderen schon sagten, sind sie identisch. Die StyleCop-Regeln zwingen Sie standardmäßig zur Verwendung von string als bewährte Praxis für C#-Code, außer bei Verweisen auf System.String statische Funktionen, wie z. B. String.Format , String.Join , String.Concat , etc...

133voto

Jeppe Stig Nielsen Punkte 57056

Neue Antwort nach 6 Jahren und 5 Monaten (Prokrastination).

Während string ist ein reserviertes C#-Schlüsselwort, das immer eine feste Bedeutung hat, String ist nur ein gewöhnlicher Kennung was sich auf alles beziehen kann. Abhängig von den Mitgliedern des aktuellen Typs, dem aktuellen Namespace und dem angewandten using Richtlinien und deren Platzierung, String könnte ein Wert oder ein Typ sein, der sich von global::System.String .

Ich werde zwei Beispiele anführen, bei denen using Richtlinien werden nicht helfen .


Erstens, wenn String ist eine Wert des aktuellen Typs (oder einer lokalen Variablen):

class MySequence<TElement>
{
  public IEnumerable<TElement> String { get; set; }

  void Example()
  {
    var test = String.Format("Hello {0}.", DateTime.Today.DayOfWeek);
  }
}

Das obige Beispiel lässt sich nicht kompilieren, weil IEnumerable<> hat kein nicht-statisches Mitglied namens Format und es gelten keine Erweiterungsmethoden. Im obigen Fall kann es immer noch möglich sein, Folgendes zu verwenden String in anderen Kontexten, in denen ein Typ ist syntaktisch die einzige Möglichkeit. Zum Beispiel String local = "Hi mum!"; könnte OK sein (je nach Namespace und using Richtlinien).

Schlimmer: Sagen String.Concat(someSequence) wird wahrscheinlich (je nach using s) gehen zur Linq-Erweiterungsmethode Enumerable.Concat . Es wird nicht zur statischen Methode übergehen string.Concat .


Zweitens, wenn String ist eine weitere Typ innerhalb des aktuellen Typs verschachtelt:

class MyPiano
{
  protected class String
  {
  }

  void Example()
  {
    var test1 = String.Format("Hello {0}.", DateTime.Today.DayOfWeek);
    String test2 = "Goodbye";
  }
}

Keine der beiden Aussagen in der Example Methode kompiliert. Hier String ist immer ein Klavier String , MyPiano.String . Kein Mitglied ( static oder nicht) Format auf ihr existiert (oder von ihrer Basisklasse geerbt wird). Und der Wert "Goodbye" kann nicht in sie umgewandelt werden.

113voto

Ishmael Punkte 28069

Die Verwendung von Systemtypen macht es einfacher, zwischen C# und VB.Net zu portieren, falls Sie sich dafür interessieren.

102voto

RolandK Punkte 490

Im Gegensatz zu dem, was bei anderen Programmierern üblich zu sein scheint, bevorzuge ich String über string nur um die Tatsache hervorzuheben, dass String ist ein Referenztyp, wie Jon Skeet erwähnte.

96voto

JeeShen Lee Punkte 2956

string ist ein Alias (oder eine Kurzform) von System.String . Das heißt, durch Eingabe von string wir meinten System.String . Sie können mehr in think link lesen: string' ist ein Alias/Kurzform von System.String.

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