隐形类型本地关键字var
使用C#匿名类型新增的功能,如果变量被实例化为一个未命名的类型,如匿名类型,那么需要为该变量指明什么类型的值呢?
??? 变量名 = new {first = 1, second = "名称"};Code language: JavaScript (javascript)
微软的设计师通过新的关键字var来解决这个问题。这个关键字可以通过变量的初始化值来推断出它的类型。比如 var one = 1; 那么这个one就是整形。所以,var定义的变量必须初始化。比如这样 var name; 是不允许的。
另外变量只能赋值同一种类型的值。比如
var name = "jack";
name = 123;Code language: JavaScript (javascript)
这样就会报错的。因为name在一开始的时候已经是字符串类型了,如果再把它改为整数类型,会报错的。
可以使用var来定义一个匿名类型的变量
var pig = new {name = "猪八戒", age = 500};Code language: JavaScript (javascript)
另外,不要无节制地使用var。因为对于不同的开发者可能不知道这个变量的类型,并且会使得代码难以阅读。
对象和集合的初始化表达式
对象初始化。比如我们定义一个变量
public class Address
{
public string city;
public string state;
}Code language: PHP (php)
在C#3.0之前,如果没有指定构造函数,我们定义一个变量,可能会这样来初始化。
Address address = new Address();
address.city = "guangzhou";
address.state = "Canton";Code language: JavaScript (javascript)
这样写的话,我们在使用lambda表达式的时候,在使用.Select方法的时候,就不好使用new来赋值了。因为没有构造函数去初始化。Select(a => new Address(???))
使用新的方法来实例化和初始化
Address address = new Address { city = "guangzhou", state = "canton" };Code language: JavaScript (javascript)
集合初始化
List<string> fruits = new List<string> { "苹果", "香蕉", "雪梨", "荔枝" };Code language: PHP (php)
匿名类型
前面我们的Address类,完全可以不需要事先定义好Address类,我们可以写成这样
var address = new { city = "shenzhen", state = "guangdong" };Code language: JavaScript (javascript)
在使用的时候,我们还可以这样子用 address.city 或者 address.state
static void Main(string[] args)
{
int one = 1;
var two = 1;
string name = "www.bamn.cn";
//name = 1;
var age = 123;
//age = 12;
var p = new Person();
var n = new { name = "1111", age = 12 };
Console.WriteLine(n.name);
Console.WriteLine(one);
Console.WriteLine(two);
Console.WriteLine(name);
Address address = new Address();
address.city = "广州";
address.state = "广东";
List<Address> list = new List<Address>();
List<string> ls = list.Select(x => x.city).ToList();
List<Address> lsd = list.Select(x => new Address() { city = "", state = x.state + "111" }).ToList();
Console.ReadKey();
}Code language: PHP (php)
Previous: 表达式树和Enumerable还有Queryable的理解
Next: 扩展方法