C#对象和集合初始化器

对象初始化器(Object initializers 

参见:MSDN

使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。 下面的示例演示如何将对象初始值设定项用于命名类型 (Cat)。 请注意,在 Cat类中使用了自动实现的属性。

class Cat
{
    // Auto-implemented properties.
    public int Age { get; set; }
    public string Name { get; set; }
}
Cat cat = new Cat { Age = 10, Name = "Fluffy" };

对象初始化器和匿名类型

对象初始化器在 LINQ 查询表达式中尤其有用。  查询表达式常使用只能通过使用对象初始值设定项进行初始化的匿名类型,如下面的声明所示。
var pet = new { Age = 10, Name = "Fluffy" };
利用匿名类型,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};

集合初始化器(Collection initializers

参见:http://blog.csdn.net/maotin/article/details/2977138
集合初始化器会对初始化器中的元素进行按序调用ICollection<T>.Add(T) 。应用集合初始化器的对象的类型必须实现了System.Collections.Generic.ICollections<T>接口并指定了确定的T。

List<int> num= new List<int> { 0, 1, 2, 6, 7, 8, 9 };

List<Customer> customers = new List<Customer>{ 
        new Customer{ID="001",Name="test001",age="28"},
        new Customer{ID="002",Name="test002",age="29"},
        new Customer{ID="003",Name="test003",age="30"} };
这和以前调用List.Add没有本质的区别,编译器自动的调用了List 的无参构造方法,然后实例化一个个的Customer ,再一个个的 Add 进去,和我们原来的做法没有什么不同,但是,这是编译器在后台自动处理,简省了我们很多的编码工作。

猜你喜欢

转载自blog.csdn.net/u011704031/article/details/17112279