C# vorinitialisierte String-Arrays

darktrym

Fahnenträger
Ich habe aus Versehen die eckigen Klammern für den Array weggelassen, also statt string[] names = {"Nur", "NetBSD"} nur string names = {"Nur", "NetBSD"}. VS2013 akzeptiert das ohne Warnungen oder Fehlermeldungen macht aber trotzdem was komplett anderes. Es sieht aus wie ein int32 Array, nur warum?
 
Wie in C ist in C# ein "String" nichts anderes als ein char-Array (naja, zumindest bei der Initialisierung, danach ist er ein nicht veränderbares Objekt). Ich würde unterstellen wollen, dass auch C# "Nur" und "NetBSD" als char casten kann. Ein char ist in C# ein unsignierter 16-Bit-Wert - also (auch das ist keine Besonderheit von C#) eine Zahl.

Keine Warnungen überraschen mich zwar, aber ich kann das auf die Schnelle gerade nicht testen. Höchste Warnstufe? Bestimmte Prüfungen ausgenommen?
 
Das kein(e) Fehler/Warnung angezeigt wird, überrascht mich ebenfalls, bei mir in VS2017 bekomme folgende Meldung:
Can only use array initializer expressions to assign to array types. Try using a new expression instead.
 
Wie in C ist in C# ein "String" nichts anderes als ein char-Array (naja, zumindest bei der Initialisierung, danach ist er ein nicht veränderbares Objekt). Ich würde unterstellen wollen, dass auch C# "Nur" und "NetBSD" als char casten kann. Ein char ist in C# ein unsignierter 16-Bit-Wert - also (auch das ist keine Besonderheit von C#) eine Zahl.

Keine Warnungen überraschen mich zwar, aber ich kann das auf die Schnelle gerade nicht testen. Höchste Warnstufe? Bestimmte Prüfungen ausgenommen?

Nix anderes ist schon mal falsch weil ein String ein Objekt ist und nicht nur ein Char-Array. Und dann hat er ja ein int32 also 4 Bytes konvertiert, von einem Widestring weit entfernt.
 
Klammer nicht gelesen? :)

Code:
string foo = { 'h', 'a', 'l', 'l', 'o' };

Ist hinterher trotzdem ein Objekt.
 
Ok, ich musste nochmal nachlesen das Strings in C# auch immutable sind aber 16Bit sind keine 32Bit oder übersehe ich da was?
 
Zurück
Oben