zoukankan      html  css  js  c++  java
  • 编写高质量代码改善C#程序的157个建议——建议19:使用更有效的对象和集合初始化

    建议19:使用更有效的对象和集合初始化

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

    对象初始化:

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

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

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

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

    使用集合初始化设定项,编译器会在集合对象创建完毕后对集合调用Add方法。

    上面这段代码演示了如何在初始化语句中创建一个新对象或一个现有对象,以及一个null值。

     不过,初始化设定项不仅仅是为了对象和集合初始化方便,为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 ? "Old" : "Young" };
                foreach (var item in pTemp)
                {
                    Console.WriteLine(string.Format("{0}:{1}", item.Name, item.AgeScope));
                }

    转自:《编写高质量代码改善C#程序的157个建议》陆敏技

  • 相关阅读:
    VSCODE打开一个文件,另一个文件就关闭的问题的解决方法
    elementui的el-tree第一次加载无法展开和选中的问题
    Java线程知识:二、锁的简单使用
    “商家参数格式有误”应用切微信H5支付完美解决方案
    git 基础操作,公私钥认证/ssh公私钥登录
    Python数据分析之亚马逊股价
    Python分析6000家破产IT公司
    Python数据分析之股票数据
    Python数据分析之全球人口数据
    Vue 面试重点真题演练
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4728645.html
Copyright © 2011-2022 走看看