visual - vs 2012 c# version




Was ist der Unterschied zwischen String und String in C#? (20)

Anders als bei anderen Programmierern allgemein üblich, bevorzuge ich String gegenüber string , nur um die Tatsache hervorzuheben, dass String ein Referenztyp ist, wie Jon Skeet erwähnt hat.

https://code.i-harness.com

Beispiel ( Fall beachten ):

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

Was sind die Richtlinien für die Verwendung von jedem? Und was sind die Unterschiede ?


Beide sind gleich. Aus Sicht der Codierungsrichtlinien ist es jedoch besser, string anstelle von String . Dies ist, was Entwickler normalerweise verwenden. Anstatt Int32 wir beispielsweise int da int is ein Alias ​​für Int32

FYI "Der Schlüsselwortstring ist einfach ein Alias ​​für die vordefinierte Klasse System.String ." - C # System.String http://msdn2.microsoft.com/En-US/library/aa691153.aspx


Die Verwendung von Systemtypen erleichtert das Portieren zwischen C # und VB.Net, wenn Sie sich für solche Dinge interessieren.


Die beste Antwort, die ich je über die Verwendung der bereitgestellten Typenaliasnamen in C # gehört habe, stammt von Jeffrey Richter in seinem Buch CLR Via C # . Hier sind seine 3 Gründe:

  • Ich habe eine Reihe verwirrter Entwickler gesehen, die nicht wissen, ob sie String oder String in ihrem Code verwenden sollen. Da die Zeichenfolge (ein Schlüsselwort) in C # genau mit System.String (einem FCL-Typ) übereinstimmt, besteht kein Unterschied, und beide können verwendet werden.
  • In C # kann long zu System.Int64 zugeordnet werden , long jedoch in einer anderen Programmiersprache zu einem Int16 oder Int32 . In der Tat wird C ++ / CLI tatsächlich lange als Int32 behandelt . Jemand, der Quellcode in einer Sprache liest, kann leicht die Absicht des Codes falsch interpretieren, wenn er oder sie daran gewöhnt ist, in einer anderen Programmiersprache zu programmieren. Tatsächlich behandeln die meisten Sprachen nicht einmal lange ein Schlüsselwort und kompilieren auch keinen Code, der sie verwendet.
  • In der FCL gibt es viele Methoden, deren Typnamen Teil ihrer Methodennamen sind. Der Typ BinaryReader bietet beispielsweise Methoden wie ReadBoolean , ReadInt32 , ReadSingle usw. und der Typ System.Convert bietet Methoden wie ToBoolean , ToInt32 , ToSingle usw. an. Obwohl es legal ist, den folgenden Code zu schreiben, fühlt sich die Zeile mit Float für mich sehr unnatürlich an, und es ist nicht offensichtlich, dass die Zeile richtig ist:
BinaryReader br = new BinaryReader(...);
float val  = br.ReadSingle(); // OK, but feels unnatural
Single val = br.ReadSingle(); // OK and feels good

Also da hast du es. Ich denke, das sind alles wirklich gute Punkte. Ich finde jedoch nicht, dass ich Jeffreys Rat in meinem eigenen Code benutze. Vielleicht bin ich zu fest in meiner C # -Welt, aber am Ende versuche ich, meinen Code wie den Rahmencode aussehen zu lassen.


Es ist oben abgedeckt worden; Sie können string jedoch nicht in Reflektion verwenden. Sie müssen String .


Es ist wirklich eine Frage der Konvention. string sieht eher wie C / C ++ aus. Die allgemeine Konvention ist die Verwendung der von Ihnen gewählten Abkürzungen (int / Int für Int32 ). Dies gilt auch für "Objekt" und decimal .

Theoretisch könnte dies helfen, Code in einen zukünftigen 64-Bit-Standard zu portieren, in dem "int" bedeuten könnte Int64, aber das ist nicht der Punkt, und ich würde erwarten, dass jeder Upgrade-Assistent ohnehin irgendwelche intVerweise ändert , Int32nur um sicher zu sein.


Ich möchte dies nur der Antwort von lfousts hinzufügen, vom Buch Ritchers:

In der C # -Sprachenspezifikation heißt es: „Die Verwendung des Schlüsselworts wird aus Stilgründen gegenüber der Verwendung des vollständigen Systemtypnamens bevorzugt.“ Ich stimme der Sprachspezifikation nicht zu; Ich ziehe es vor, die FCL-Typnamen zu verwenden und die primitiven Typnamen vollständig zu vermeiden. Ich wünschte sogar, dass Compiler nicht einmal die primitiven Typnamen anboten und die Entwickler gezwungen waren, stattdessen die FCL-Typnamen zu verwenden. Hier sind meine Gründe:

Ich bekam seine Meinung nicht, bevor ich den ganzen Abschnitt gelesen habe.


Ich ziehe die großgeschriebenen .NET Typen (anstelle der Aliasnamen) aus Gründen der Formatierung vor. Die .NET Typen haben dieselbe Farbe wie andere Objekttypen (die Werttypen sind schließlich richtige Objekte).

Bedingte Schlüsselwörter und Steuerelemente (z. B. if , switch und return ) sind in Kleinbuchstaben und dunkelblau (Standardeinstellung). Und ich möchte lieber nicht die Uneinigkeit in der Verwendung und im Format haben.

Erwägen:

String someString; 
string anotherString; 

String ( System.String ) ist eine Klasse in der Basisklassenbibliothek. String (Kleinbuchstaben) ist eine in C # reservierte Arbeit, die ein Alias ​​für System.String ist. Int32 vs. Int ist eine ähnliche Situation wie Boolean vs. bool . Mit diesen für die C # -Sprache spezifischen Schlüsselwörtern können Sie Grundelemente in einem ähnlichen Stil wie C deklarieren.


Wie die anderen sagen, sind sie gleich. Die StyleCop-Regeln zwingen Sie standardmäßig zur Verwendung von string als String.Format String.Join C # -Code-Stil, außer wenn statische Funktionen von System.String werden, z. B. String.Format , String.Join , String.Concat usw.


string ist ein Alias ​​in C # für System.String .
Technisch gibt es also keinen Unterschied. Es ist wie int vs. System.Int32 .

Im Rahmen der Richtlinien wird im Allgemeinen empfohlen, die string immer dann zu verwenden, wenn Sie auf ein Objekt verweisen.

z.B

string place = "world";

Ebenso denke ich, dass es generell empfohlen wird, String zu verwenden, wenn Sie speziell auf die Klasse verweisen müssen.

z.B

string greet = String.Format("Hello {0}!", place);

Dies ist der Stil, den Microsoft in seinen Beispielen verwendet .

Es scheint, dass sich die StyleCop in diesem Bereich möglicherweise geändert haben, da StyleCop nun die Verwendung der C # StyleCop Aliase erzwingt.


String ist kein Schlüsselwort und kann als Bezeichner verwendet werden, während string ein Schlüsselwort ist und nicht als Bezeichner verwendet werden kann. Und in Funktionssicht sind beide gleich.


System.String ist die .NET-Zeichenfolgenklasse - in C # string ist ein Alias ​​für System.String sind sie in der Verwendung identisch.

Was die Richtlinien angeht, würde ich mich nicht zu sehr festsetzen und einfach das verwenden, was Sie möchten - es gibt wichtigere Dinge im Leben und der Code wird auf jeden Fall derselbe sein.

Wenn Sie feststellen, dass Systeme erstellt werden, bei denen die Größe der von Ihnen verwendeten Ganzzahlen angegeben werden muss, und Sie dazu tendieren, Int16 , Int32 , UInt16 , UInt32 usw. zu verwenden, dann ist die Verwendung von String natürlicher, wenn Sie sich zwischen verschiedenen UInt32 bewegen .net-Sprachen könnten die Dinge verständlicher machen - ansonsten würde ich string und int verwenden.


System.String ist ein Alias ​​für System.String . Sie sind in C# .

Es gibt eine Debatte darüber, ob Sie die System.Int32 ( System.Int32 , System.String usw.) oder die C# aliases ( int , string usw.) verwenden sollten. Ich persönlich glaube, Sie sollten die C# aliases , aber das ist nur meine persönliche Präferenz.


string ist ein reserviertes Wort, aber String ist nur ein Klassenname. Dies bedeutet, dass string nicht als Variablenname verwendet werden kann.

Wenn Sie aus irgendeinem Grund eine Variable namens string wollten, sehen Sie nur die erste dieser Kompilierungen:

StringBuilder String = new StringBuilder();  // compiles
StringBuilder string = new StringBuilder();  // doesn't compile 

Wenn Sie wirklich einen Variablennamen namens string wünschen, können Sie @ als Präfix verwenden:

StringBuilder @string = new StringBuilder();

Ein weiterer kritischer Unterschied: hebt sie anders hervor.


string ist nur ein Alias ​​für System.String . Der Compiler behandelt sie gleich.

Der einzige praktische Unterschied besteht in der Hervorhebung der Syntax, die Sie erwähnen, und dass Sie using System schreiben müssen using System wenn Sie String .


Es gibt einen Unterschied - Sie können String ohne using System; vorher.


String ist ein Schlüsselwort und Sie können String nicht als Bezeichner verwenden.

String ist kein Schlüsselwort und Sie können es als Bezeichner verwenden:

Beispiel

string String = "I am a string";

Das Keyword stringist ein Alias ​​für System.Stringabgesehen von der Keyword-Ausgabe, die beiden sind genau gleichwertig.

 typeof(string) == typeof(String) == typeof(System.String)

Es gibt keinen Unterschied zwischen den beiden - stringscheint jedoch die bevorzugte Option zu sein, wenn man den Quellcode anderer Entwickler betrachtet.


Ja, das ist kein Unterschied zwischen ihnen, genau wie das boolund Boolean.





alias