使用更有效的对象和集合初始化

使用更有效的对象和集合初始化

继上一篇“foreach不能代替for”后,本文继续看《编写高质量代码改善C#程序的157个建议》一书第19个建议“使用更有效的对象和集合初始化”。喜欢本书请到各大商城购买原书,支持正版。

正文开始:


依赖于属性和FCL 3.5之后的语法规则,现在我们有了更加简洁有效的对象和集合初始化机制:对象和集合初始化设定项

对象初始化:

class Program
{
  static void Main (string [] args)
  {
    Person person = new Person() { Name = "Mike", Age = 20 };
  }
}
class Person
{
  public string Name { get ; set ; }
  public int Age { get ; set;}
}

对象初始化设定项支持在大括号中对自动实现的属性进行赋值。以往只能依靠构造方法传值进去,或者在对象构造完毕后对属性进行赋值。现在这些步骤简化了,初始化设定项实际相当于编译器在对象生成后对属性进行了赋值。

集合初始化也同样进行了简化:

List<Person> personList = new List<Person>()
{
  new Person () { Name = "Rose" , Age = 19 },
  mike,
  null
};

使用集合的初始化设定项,编译器会在集合对象创建完毕后对集合调用Add方法。上面这段代码演示了如何在初始化语句中创建一个新对象或一个现有对象,以及一个null 值。

不过,初始化设定项绝不仅仅是为了对象和集合初始化的方便,它更重要的作用是为LINQ查询中的匿名类型进行属性的初始化。由于LINQ查询返回的集合中匿名类型的属性都是只读的,如果需要为匿名类型属性赋值,或者增加属性,只能通过初始化设定项来进行。初始化设定项还能为属性使用表达式。

下面的代码为LINQ查询中创建了一个新的匿名类型,该类型含有属性Name和AgeScope,而AgeScope需要通过计算Person的Age属性得到。

List<Person> personList2 = new List<Person>()
{
  new Person (){ Name = "Rose" , Age = 19 },
  new Person (){ Name = "steve" , Age = 45 },
  new Person () { Name = "Jessica" ,Age = 20 }
}

var pTemp = from p in personList2 select new { p.Name,
Agescope = p. Age > 20 ? "o1d" : "Young" };

foreach (var item in pTemp)
{
  Console.WriteLine(string.Format("{0}:{1}", item.Name,item.AgeScope));
}

每天学一点,不贪多。

下一篇我们接着读”建议20:使用泛型集合代替非泛型集合”,欢迎关注微信公众号【乐趣课堂】。

原文出处:微信公众号【乐趣课堂】

原文链接:https://mp.weixin.qq.com/s/ToYj41Mjm_LihUBLxZp2Bg

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论