C# 2.0 introduced Nullable which gives us the ability to have nullable value types. This is handy and makes a number of scenarios easier (particularly database interaction in my experience). It’s very much in the category “nice to have”, useful but in most cases not essential. What I want is the inverse, reference types that cannot be null.
NullReferenceException is one of the least helpful exceptions you can expect to encounter. It carries very little information, generally leaving you with “something broke in there somewhere and its all your fault”. In almost all cases you get this exception because you forgot to do appropriate validation and do something more useful. Tracking the cause of a NullReferenceException can be tedious and time consuming, especially if all you have is the exception details (as would be the case from a logged exception from a production system).
Providing reference types that cannot be made null would eliminate this possibility. The compiler would require that any instance is immediately assigned a non-null value and any assignment cannot be to null. This would eliminate a lot of boilerplate code currently written to protect against nulls.
I’m not a language or virtual machine expert but I strongly suspect that introducing non-nullable types would be a significantly greater effort than was introducing nullable values types in C# 2.0. Checking that null may never be assigned to a value is likely to have nasty corner cases and working with the existing reference type behaviour could be quite complex. I have no expectation of this being in C# 4.0, but it would be nice to see it added to C# 5.0.