A var variable must be initialized when it is declared. The compile-time type of the initializer expression must not be of null type but the runtime expression can be null. Once it is initialized its data type is fixed to the type of the initial data. The following statements are valid uses of the var keyword:
// valid var statements
var x = "1";
var n = 0;
string s = "string";
var s2 = s;
s2 = null;
string s3 = null;
var s4 = s3;
At compile time, the above var statements are compiled to IL, like this:
string x = "1";
int n = 0;
string s2 = s;
string s4 = s3;
The var keyword is only meaningful to the Visual Studio compiler. The compiled
assembly is actually a valid .NET 2.0 assembly. It doesn't need any special
instructions or libraries to support this feature.
The following statements are invalid usages of the var keyword:
// invalid var statements
var nu = null;
var v2 = "12"; v2 = 3;
The first one is illegal because it doesn't have an initializer.
The second one initializes variable nu to null, which is not allowed, although once
defined, a var type variable can be assigned null. If you think that at compile
time the compiler needs to create a variable using this type of initializer then you
understand why the initializer can't be null at compile time.
The third one is illegal because, once defined, an integer can't be converted to a string implicitly (v2 is of type string).