在c#3.0里允许我们这样定义变量
var age = 10;
var name = "james";
var time = DateTime.Now;
var books = new string[]{"aa","bb"};
但是也仅此而已,var只允许我们定义c#编译器通过上下文推断出类型的变量。
var x; // 错误,没有用来推断类型的初始化器
var y = { 1, 2, 3 }; // 错误,不允许使用集合初始化器
var z = null; // 错误,不允许出现空类型
像这样也是不允许的
var a= 10;
a= "james";
来看看隐私类型的IL实现。
c#2.0
.method public hidebysig instance void oldvar() cil managed
{
// 代码大小 8 (0x8)
.maxstack 1
.locals init ([0] string name)
IL_0000: nop
IL_0001: ldstr "james"
IL_0006: stloc.0
IL_0007: ret
} // end of method testvar::oldvar
c#3.0
.method public hidebysig instance void newvar() cil managed
{
// 代码大小 8 (0x8)
.maxstack 1
.locals init ([0] string name)
IL_0000: nop
IL_0001: ldstr "james"
IL_0006: stloc.0
IL_0007: ret
} // end of method testvar::newvar
完全一样。
我猜想var的出现其实完全是为了配合匿名类型而出现的。

var a = new
{ Name = "james" ,Age = 25};
Console.WriteLine(a.Name);
Console.WriteLine(a.Age);
在linq中应用也比较多

int[] numbers =
{ 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
var queryLowNums =
from num in numbers
where num < 5
select num;
foreach (var s in queryLowNums)


{
Console.Write(s.ToString() + " ");
}

也就是说对象是匿名类型,或者对象是难以预测的类型的时候。
像这样的代码var age = 10;还是少写为好,一是类型安全,再是也为代码阅读尽量少造成障碍。
posted on 2008-01-06 18:20
tianyamoon 阅读(1031)
评论(7) 编辑 收藏 所属分类:
c#技术 、
Visual Studio 2008