Programmier ihr "unsigned clean" in C#?



  • Ich hatte anfangs versucht signed/unsigned in C# so zu verwenden wie C++. Weil ich das von C++ so gewohnt bin. Und es immer doof finde, wenn z.B. Libraries signed Typen verwenden, wo die Werte nie negativ sein können.

    Die Konvertierungsregeln von C# sind dafür ja auch super geeignet. Viel besser als die von C++, wo man immer selbst aufpassen muss dass z.B. nicht nen signed mit nem unsigned Typ vergleicht.

    Nur dummerweise sträubt sich das Framework. Weil's halt "CLS compliant" sein muss, und "CLS compliant" heisst "kein unsigned" (ausser byte).
    Was im Endeffekt dazu geführt hat, dass ich so-gut-wie nirgends mehr unsigned Typen verwende. Weil das ständige rumgecaste einfach nur nervt.

    Wie handhabt ihr das? Casten oder alles signed? Oder mal so mal so?



  • hustbaer schrieb:

    Wie handhabt ihr das? Casten oder alles signed? Oder mal so mal so?

    [assembly: CLSCompliant(false)]
    

    , oder bei den entsprechenden Klassen das Attribut einfügen.

    Ein problem mit C# ist aber, das automatisch mit int gerechnet wird:

    int a = 0, b = 0, c = a + b;
    

    Lässt sich bei allen kleineren Typen als int und uint nicht kompilieren, da automatisch auf int gecasted wird. 😡



  • Rhombicosidodecahedron schrieb:

    [assembly: CLSCompliant(false)]
    

    , oder bei den entsprechenden Klassen das Attribut einfügen.

    Ich glaub du hast mich falsch verstanden.
    CLSCompliant(false) ändert ja auch nix daran dass List<T>.Count signed ist, der Parameter für den Indexer signed ist etc.


  • Administrator

    Ich verwende unsigned nur in Spezialfällen. Habe auch in C++ vor längerem damit aufgehört unsigned für Zahlen zu verwenden, welche nie negativ werden. Ist zwar eine schöne Sache aber das ständige rumgecaste ging mir zusehends auf die Nerven und ich sehe keinen wirklichen Vorteil darin unsigned Typen zu verwenden.

    Also ja, fast "unsigned clean" bis auf ein paar Spezialfälle.

    Grüssli



  • Ich hab unsigned komplett abgeschworen, weil mir das casten auf die Nerven gegangen ist. Schont meine Nerven und praktische Nachteile hatte es bis jetzt nicht.



  • GPC schrieb:

    Ich hab unsigned komplett abgeschworen, weil mir das casten auf die Nerven gegangen ist. Schont meine Nerven und praktische Nachteile hatte es bis jetzt nicht.

    👍

    unsigned nur in ganz seltenen Fällen. short und long verwende ich übrigens auch so gut wie nie wenn es keinen zwingenden Grund gibt.



  • Ich verwende auch kein unsigned. int ist einfacher viel schneller eingetippt und schöner als size_t oder unsigned int, und dann muss man wie bereits erwähnt ständig casten und schafft sich damit nur mehr Probleme, als man potentiell verhindern könnte.



  • Danke für die Antworten.
    Dann fühl ich mich in guter Gesellschaft.

    Wobei ich in C++ weiterhin unsigned verwende sobald ein Wert nie negativ werden kann. Gerade size_t verwende ich sehr freizügig.

    Aber in C# eben nicht, weil mit der "Kampf gegen das System" zu blöd wurde. Und es macht den Code ja auch nicht leserlicher wenn in zwei von drei Zeilen ein oder gar mehrere Casts stehen.


Log in to reply