特性_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > 特性

特性

 2013/12/18 16:09:14  iworldnd  博客园  我要评论(0)
  • 摘要:匿名类型和对象集合初始化器匿名类型varKeyPair1=new{Key="yuyi",Value="Programer"};在内部自动生成<>f__AnonymousType0<<Key>j__TPar,<Value>j__TPar>这个类型是直接继承自System.Object的,并且是internalseald(只在程序集内可见,并且不能被继承)。有心的你也许会发现,这个类型还是一个泛型类型
  • 标签:

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

匿名类型

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 对象的区别

  • 相关文章
发表评论
用户名: 匿名