zoukankan      html  css  js  c++  java
  • 特性

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

    匿名类型

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

  • 相关阅读:
    配置hive的元数据到Mysql中
    对部分spi控制的外设芯片需要断电再上电处理
    驱动芯片L9945的odd parity的计算方法
    bit field不具备可移植性
    multiple storage classes in declaration specifiers报错解决
    C编译器中对h文件的重重包含导致的预处理不同的问题
    linker file链接文件
    eclipse编辑器中的TODO和FIXME的使用
    解决hightec的链接文件的路径问题
    LIN开发
  • 原文地址:https://www.cnblogs.com/jiaofu2012/p/3480335.html
Copyright © 2011-2022 走看看