1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

C# vorinitialisierte String-Arrays

Dieses Thema im Forum "Programmieren" wurde erstellt von darktrym, 10 April 2018.

  1. darktrym

    darktrym Fahnenträger

    Registriert seit:
    21 August 2006
    Beiträge:
    1.669
    Ort:
    Düsseldorf
    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?
     
  2. CrimsonKing

    CrimsonKing Systemzerstörer

    Registriert seit:
    9 März 2012
    Beiträge:
    1.681
    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?
     
  3. gadean

    gadean Member

    Registriert seit:
    26 Oktober 2013
    Beiträge:
    191
    Das kein(e) Fehler/Warnung angezeigt wird, überrascht mich ebenfalls, bei mir in VS2017 bekomme folgende Meldung:
     
  4. darktrym

    darktrym Fahnenträger

    Registriert seit:
    21 August 2006
    Beiträge:
    1.669
    Ort:
    Düsseldorf
    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.
     
  5. CrimsonKing

    CrimsonKing Systemzerstörer

    Registriert seit:
    9 März 2012
    Beiträge:
    1.681
    Klammer nicht gelesen? :)

    Code:
    string foo = { 'h', 'a', 'l', 'l', 'o' };
    Ist hinterher trotzdem ein Objekt.
     
  6. darktrym

    darktrym Fahnenträger

    Registriert seit:
    21 August 2006
    Beiträge:
    1.669
    Ort:
    Düsseldorf
    Ok, ich musste nochmal nachlesen das Strings in C# auch immutable sind aber 16Bit sind keine 32Bit oder übersehe ich da was?