• C#3.0新特性(二)


    对象和集合初始值设定项
    使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。
    private class Cat
    {
        // Auto-implemented properties
        public int Age { get; set; }
        public string Name { get; set; }
    }

    static void MethodA()
    {
        // Object initializer
        Cat cat = new Cat { Age = 10, Name = "Sylvester" };
    }
     

    a.将对象初始值设定项用于匿名类型
    尽管对象初始值设定项可以用在任何上下文中,但它们在 LINQ 查询表达式中尤其有用。查询表达式经常使用匿名类型,而这些类型只能使用对象初始值设定项进行初始化。在 select 子句中,查询表达式可以将原始序列的对象转换为可能具有不同的值和形式的对象。如果您只想存储某个序列中每个对象的部分信息,这会非常有用。在下面的示例中,假定某个产品对象 (p) 包含很多字段和方法,而您只想创建包含产品名称和单价的对象序列。

    var productInfos =
        from p in products
        select new { p.ProductName, p.UnitPrice };

    当执行此查询时,productInfos 变量将包含一个对象序列,而这些对象可以在 foreach 语句中访问,如下面的示例所示:
    foreach(var p in productInfos){...}
     

    新的匿名类型中的每个对象都具有两个公共属性,这两个属性具有与原始对象中的属性或字段相同的名称。还可以在创建匿名类型时重命名字段;下面的示例将 UnitPrice 字段重命名为 Price。
    select new {p.ProductName, Price = p.UnitPrice};
     

    b.集合初始值设定项
    使用集合初始值设定项可以在初始化一个实现了 IEnumerable 的集合类时指定一个或多个元素初始值设定项。元素初始值设定项可以是简单的值,也可以是表达式或对象初始值设定项。通过使用集合初始值设定项,您将无需在源代码中指定多个对该类的 Add 方法的调用;编译器会添加这些调用。

    下面的示例演示了两个简单的集合初始值设定项:
        List<int> digits = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        List<int> digits2 = new List<int> { 0 + 1, 12 % 3, MakeInt() };
     

    下面的集合初始值设定项使用对象初始值设定项来初始化在前面的一个示例中定义的 Cat 类的对象。请注意,各个对象初始值设定项被分别括在大括号中,并且用逗号分隔。
    List<Cat> cats = new List<Cat>
    {
        new Cat(){ Name="Sylvester", Age=8 },
        new Cat(){ Name="Whiskers", Age=2},
        new Cat() { Name="Sasha", Age=14}
    };


     

    如果集合的 Add 方法允许,可以将 null 指定为集合初始值设定项中的一个元素。
    List<Cat> moreCats = new List<Cat>
    {
        new Cat(){ Name="Furrytail", Age=5 },
        new Cat(){ Name="Peaches", Age=4},
        null
    };

     

  • 相关阅读:
    SpringMVC + Spring + MyBatis 学习笔记:遭遇order by 排序问题
    SpringMVC + Spring + MyBatis 学习笔记:SpringMVC和Spring一同工作的时候,AOP事务管理不起作用的解决方法
    SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法
    SpringMVC + Spring + MyBatis 学习笔记:为MyBatis增加打印SQL功能 (最简化配置)
    [转]大部分人努力程度之低,根本轮不到拼天赋
    String内存陷阱简介
    同为程序员 为什么我的工资最低
    在程序员的眼里,用户是这样使用他们开发的软件的
    POI怎么和项目结合起来使用
    uploadify
  • 原文地址:https://www.cnblogs.com/jeriffe/p/1808156.html
Copyright © 2020-2023  润新知