4、编译器在后面为我们做了些什么呢?使用Reflector反编译程序集:Book <>g__initLocal0 = new Book();<>g__initLocal0.Title = "Inside COM";<>g__initLocal0.ISBN = "123-456-789";Book book = <>g__initLocal0; C#编译器生成了一个新的局部变量<>g__initLocal0,调用Book的默认无参构造方法初始化它,然后对它的属性进行赋值,最后将这个局部变量赋值给book。看到这里,我们应该想到,要使用对象初始化器,那么这个对象必须有一个无参构造方法,如果你给这个
5、方法写了一个有参构造方法而将它的默认无参构造方法覆盖了并且没有提供一个新的无参构造方法,那么使用对象初始化器编译的时候是不会通过的(不过想不通,为啥C#编译器生成这么一个奇怪的局部变量名字,还有为啥不直接使用book呢)。像下面的代码不更好:Book book = new Book();book.Title = "Inside COM";book.ISBN = "123-456-789";后来我发现我是在debug模式下编译的,换到release模式下变成了这样:Book <>g__initLocal0 = new Book();<>g__initLocal0.Title = "Insid
6、e COM";<>g__initLocal0.ISBN = "123-456-789";被优化了。上面介绍的就是对象初始化器了,那什么是集合初始化器呢?IList books = new List();//这里就使用了对象初始化器,学以致用吧books.Add(new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 });books.Add(new Book { Title = "Inside C#", ISBN = "123-356-d89",Price=100 });books.Add(new
7、 Book { Title = "Linq", ISBN = "123-d56-d89", Price = 120 });这样的代码没少写吧,实际上也许比这更复杂,有了C#3.0我们睡觉都想笑:IList books = new List { new Book { Title = "Inside COM", ISBN = "123-456-789",Price=20 }, new