Comparing a Value Type with null does not box

Recently, I discovered something like this my current codebase:

var g = Guid.NewGuid();

if (g == null) throw new Exception("Exception");

Of course, there are other statements in between, this is just an over simplifications. The idea, however, is to compare a value type with null, which makes no sense if you know .NET a bit, but can be found all over the world I am sure.

Without checking, I was sure that this would result in boxing the value type, followed by a comparison of the reference of the box with null, which will always return false.

Well, it turns out that I was wrong. The compiler is smart enough and ignores the statement in this case, as it is useless.

Now, what if there is an else statement in there?

if (g == null) throw new Exception("Exception");
else Console.WriteLine("boxed?");

In this case, the compiler only emits that is in the else statement. It is once more smart enough.

Let’s push it a little bit. What happens if we do this:

var b = (g == null);

if (b) Console.WriteLine("boxed?");

In this case, the compiler will emit all the instructions, although it’s obvious that Console.WriteLine will never be executed. But still, no boxing.

Once more, C#’s compiler is very smart about all this. There is no boxing happening in the three cases.

Dropping Internet Explorer 9

It’s not even been 30 days as I stated earlier, but I’m going to drop Internet Explorer 9 and go back to Google Chrome…

Why you may ask? Here is why:

Needless to say, Chrome does not have any of these issues. By the way, IE9 does not run on XP, while Chrome does (and is bloody fast, still).

Sad but true, to me it’s another failed browser. It’s nice, it’s fast, but not fast enough. Once you are used to Chrome’s speed, there is no going back, every other browser feels slow.

Maybe in a year or two, with some updates?

Internet Explorer 9 RC

The RC of Internet Explorer 9 is out at the following address: http://windows.microsoft.com/ie9

For the moment, I’m exclusively using Chrome for browsing. I started using it when it first came out to give it a try, and it was so amazingly fast that returning to any other browser was painful. However, with this new version of IE, things have changed. IE9 is very fast. Also, the search function works like in Chrome, which is obviously a plus.

So, what I will do is try to use IE9 exclusively for 30 days and see what comes out of it. If I enjoy it enough, I might switch to it as my main browser, who knows?

For now, the two things I want from Chrome is offline mails for gmail (which might come with Gears that I’m installing right now) and a spell checker.