特性

匿名类型 和 对象集合初始化器

匿名类型

var KeyPair1 = new { Key="yuyi",Value="Programer"};

在内部自动生成

<>f__AnonymousType0<<Key>j__TPar, <Value>j__TPar>

这个类型是直接继承自System.Object的,并且是internal seald(只在程序集内可见,并且不能被继承)。有心的你也许会发现,这个类型还是一个泛型类型,那么只要我们在使用一个匿名类型的时候参数个数,参数名称不发生变化,编译器是不会为我们产生更多的类型的

对象集合初始化器

类似的

Book book = new Book { Title="Inside COM",ISBN="123-456-789"};

  Book b = new Book { Title = "Inside COM", ISBN = "123-456-789" };

  Book bb = new Book("aa") { Title = "Inside COM", ISBN = "123-456-789" };

 Console.Read();

                List<Book> ListBook = new List<Book> {  new Book("aa"){ Title = "Inside COM", ISBN = "123-456-789" },new

                  Book("aa","bb"){ Title = "aaa", ISBN = "aaa" }};

                Dictionary<int, string> dicResult = new Dictionary<int, string>

                                                               {

                                                                   {0, "11"},

                                                                   {1, "图片大小超过限制"},

                                                                   {2, "上传图片异常"},

                                                                   {3, "上传图片成功"}

                                                               };



                List<Book> ListBook = new List<Book> { { Title = "Inside COM", ISBN = "123-456-789" } };

对象初始化器 也会在内部自动生成一些代码

Book book = new Book();

book.Title = "Inside COM";

book.ISBN = "123-456-789";

Book book = new Book("aa");

book.Title = "Inside COM";

book.ISBN = "123-456-789";

等等

不过  new List<Book> { { Title = "Inside COM", ISBN = "123-456-789" } };  会报错 而

new Dictionary<int, string>   {  {0, "11"},{1, "图片大小超过限制"},  }; 不会报错

是因为

Dictionary<int, string> dicResult = new Dictionary<int, string>

                                                               {

                                                                   {0, "11"},

                                                                   {1, "图片大小超过限制"},

                                                                   {2, "上传图片异常"},

                                                                   {3, "上传图片成功"}

                                                               };

生成的IL 是

 Dictionary<int, string> <>g__initLocal0 = new Dictionary<int, string>();

        <>g__initLocal0.Add(0, "11");

        <>g__initLocal0.Add(1, "图片大小超过限制");

        <>g__initLocal0.Add(2, "上传图片异常");

        <>g__initLocal0.Add(3, "上传图片成功");

        Dictionary<int, string> dicResult = <>g__initLocal0;

最后啰嗦一句。

匿名类型 和 对象集合初始化器 代码层次上的区别是 new 和 new 对象的区别

你可能感兴趣的:(特性)