paperlined.org
dev > programming_languages > csharp
document updated 16 years ago, on Feb 27, 2008
http://msdn2.microsoft.com/en-us/library/1t3y8s4s.aspx
    WTF?  Okay, fine, I guess this allows a uint32 to literally fit into 32 bits, whereas in Perl,
    since everything is nullable, it's required to fit into 33 bits.
    
    Nonetheless, it's a PAIN to have to add .Value. in the middle of everything to use this fucker.

    It also (correct me if I'm wrong) makes 'struct's rather silly, since, for whatever benefits
    they provide, they're nearly identical to 'class'es... with the major exception that sticking
    'struct' in there makes a value non-nullable, but making the relatively trivial change to
    'class' instantly makes it nullable, without any of that System.Nullable<T> messiness (at least
    on the syntax side).  (and as we all know, us high-level-scripting-folks are all about form over
    function)

    More extensive explanation:  While it's possible to declare a variable like so:
        
        MyStruct? stru;

    To make a struct nullable, and that's fairly compact syntax...  It means that everywhere in code
    where this occurs:

        stru.member1 = 42;
        stru.member2 = 616;

    You now instead have to do this!

        stru.Value.member1 = 42;
        stru.Value.member2 = 616;

    Welcome to Perl's `tie` feature, folks.  Circa 1998.   (silly me, going through vast back-room
    machinations just to add a trivial amount of syntactic sugar isn't very C#-like, is it?)
    (yeah, but Lisp's meta-programming doesn't add much overhead!  (oh, shush!))
    (yeah, like making C#'s parse-tree as simple to modify as Lisp's would be remotely easy...
            Have you seen C#'s reflection classes lately?)