2. C#3.0中的匿名方法
1) 隐式类型变量 (Implicitly typed local variables)
var var1 = 1;这里我们可以看到我们并没有指定变量的类型(int , string, …),但编译器会帮我们完成这一点。熟悉脚本语言的朋友们可能会对此次语法感到惊喜,但要注意的是,C#仍然是强类型的语言,所有类型都会在编译期确定,而不是像脚本那样等到运行时,下面这张图很清楚的说明了这一点:
var var2 = 2;
var var3 = var1 + var2;
var var4 = "I'm a string.";
大家可以看到在VS编辑器的智能提示中,编译器已经找到了变量的实际类型。这个特性在结合LINQ语言进行数据查询时显得格外有用:
比如我们现在有一个UserInfo类,它包含了一个用户的许多信息,姓名,年龄,住址等等。
class UserInfo我们现在要根据年龄对数据进行一些检索,但我们希望检索结果只需要包含用户的姓名就够了,也就是firstname,和lastname这两个字段。这时候,匿名方法就可以派上用场了。
{
public string firstname;
public string lastname;
public int age;
public string address;
//...
}
var result = from userinfo in infoList大家可以看到,我们并没有返回UserInfo的整个类型,而是返回了一个只包含firstname和lastname的数据类型,编译器能够自动为我们识别出result的类型。下面我们只需要一个foreach语句就可以把数据打印出来。
where userinfo.age > 20 && userinfo.age < 35
select new { userinfo.firstname, userinfo.lastname };
foreach (var var_info in result)这里也同样用到了匿名类型(var var_info),下面这张图可以看出编译器可以识别出var_info的实际型别。
{
Console.WriteLine(var_info.firstname + " " + var_info.lastname);
}
有些文章在介绍C#3.0特性时会把它作为单独的特性,但我觉得这个特性也是属于编译器自动探测类型的范畴,所以仍然将它归类到匿名类型中来。