关键字变量var、对象初始化和匿名类型

隐形类型本地关键字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)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注