ASP.NET Hosting

Archives

Archives / 2004 / August
  • "The C# compiler won't let me do it" - answer

    Drew knows his thing. He was the one who gave the right explaination for my quiz. I just copy it here:

    DictionaryEntry is a structure and you're foreaching which means the instance is coming from IDictionaryEnumerator.Current therefore assigning to only the local copy. This would be a nasty problem if people forgot about the semantics of value types vs. ref. types, so the C# compiler prevents you from doing this.

    However, I agree with Eric Newton that the message from the compiler should be clearer! The current one is very confusing.

    Now, if you want something even more confusing, you can try the following code:

    IDictionary dictionary = new Hashtable();
    dictionary["dummy"] = "dumb";
    IEnumerator enumerator = dictionary.GetEnumerator();
    while (enumerator.MoveNext())
    {
      DictionaryEntry entry;

      entry = (DictionaryEntry) enumerator.Current;
      entry.Value = 0; // no compiler error, but "error" nonetheless
    }
    Console.WriteLine(dictionary["dummy"]);

    This one compiles, but doesn't do what you'd expect at first. Guess what the output will be... So yes, the compiler message is useful (even if not easy to understand), but doesn't fire in all the cases...

    Read more...

  • "Comments on this post are closed"

    I would like to apologize to readers: you'll notice that posting comments on most of the posts of this weblog is currently disabled. You'll see "Comments on this post are closed" instead. I'm sorry about this, and I can't change anything about it right now :-( This is a new site-wide (weblogs.asp.net) setting.
    I hope we'll be able to reactivate the comments soon! I don't like that setting at all. I appreciate comments much, and I do not consider that previous posts as obsolete.
    Scott, please do something! I you want this feature to be disabled too, please say it.

    Read more...

  • Nested comment blocks in C#

    In C#, we can use two kinds of delimiters to comment code: // and /*...*/
    The first one applies to one line, the second can be applied to a set of lines or just a part of a line (block commenting). These two possibilities are useful, but I always missed the ability to nest comment blocks.

    In C#, you can do the following:

    /*
    // this code does blabla
    blabla();
    // this code does yipeeyeah
    yipeeyeah();
    */

    But what if you want to comment out the following code?:

    // this code does blabla
    blabla();
    /* this is a long description of the call to yipeeyeah
       that spans on multiple lines */
    yipeeyeah();

    In Delphi, you have three notations: // and (*...*) and {...}. This allows you to nest comment blocks.
    In C#, the way you can do it is add // in front of every line (CTRL+K, CTRL+C in Visual Studio).

    // // this code does blabla
    // blabla();
    // /* this is a long description of the call to yipeeyeah
    //    that spans on multiple lines */
    // yipeeyeah();

    Another way of doing this is to use a #if directive. This is of course a trick, but the advantages are that your comment really looks like a block, and is collapsed by default, like a region.

    #if comment // Code removed temporarily because required method not working
    // this code does blabla
    blabla();
    /* this is a long description of the call to yipeeyeah
       that spans on multiple lines */
    yipeeyeah();
    #endif

    Read more...