• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

C# vorinitialisierte String-Arrays

darktrym

Fahnenträger
Themenstarter #1
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?
 

CrimsonKing

Systemzerstörer
#2
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?
 

darktrym

Fahnenträger
Themenstarter #4
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.
 

darktrym

Fahnenträger
Themenstarter #6
Ok, ich musste nochmal nachlesen das Strings in C# auch immutable sind aber 16Bit sind keine 32Bit oder übersehe ich da was?