对象和集合初始值设定项

1 对象初始值设定项

奋斗完整示例代码:

using System;

namespace ObjectInitExp
{
    class Program
    {
        static void Main(string[] args)
        {
//片段1
            Person p = new Person() { Name = "tiana0", Age = 28, Job=new Job(){ JobName="Coder",JobTime = 8} };
            Console.WriteLine("p:Name={0},Age={1},Job.JobName={2},Job.JobTime={3}", p.Name, p.Age, p.Job.JobName, p.Job.JobTime);
//片段2
            Person p1 = new Person{ Name = "tiana0", Age = 28, Job = new Job{ JobName = "Coder", JobTime = 8 } };
            Console.WriteLine("p1:Name={0},Age={1},Job.JobName={2},Job.JobTime={3}", p1.Name, p1.Age, p1.Job.JobName, p1.Job.JobTime);
//片段3
            Person p3 = new Person { Name = "tiana0", Age = 28, Job=null };
            Console.WriteLine("p3:Name={0},Age={1},Job.JobName={2},Job.JobTime={3}", p3.Name, p3.Age, null, null);
        }
    }

    class Person
    {
        //属性
        public string Name { get; set; }
        public int Age { get; set; }
        //字段
        public Job Job;
    }

    public class Job  
    {  
        public string JobName { get; set; }
        public int JobTime { get; set; }  
    }  
}

奋斗运行程序,结果如下:

 

 奋斗知识点小结:

  • 对象初始值设定项的作用:使用对象初始值设定项可以在创建对象时向对象的任何可访问的字段或属性分配值,而无需显式调用构造函数。 
  • 注意代码中的[片段1]与[片段2]的区别,[片段2]仅仅去掉了[片段1]中类名后面的圆括号而已,两种写法均可。
  • [片段3]中引用类型字段Job被赋值null,这样在对象初始值设定项中也是可以的。

 

2 集合初始值设定项

奋斗示例代码(接前面代码)

List<Person> pList1 = new List<Person>()  //注1
{
      new Person(){Name = "tiana0", Age = 28, Job=new Job(){ JobName="Coder",JobTime = 8}},
      new Person(){Name = "tiana0", Age = 28, Job = new Job{ JobName = "Coder", JobTime = 8 }},
      new Person(){Name = "tiana0", Age = 28, Job=null},//注2
      Null//注3
};
int i = 0;
foreach (Person pTemp in pList1)
{
      if (pTemp != null)//注4
      {
            Console.WriteLine("pTemp{0}:Name={1},Age={2},Job.JobName={3},Job.JobTime={4}", i++, pTemp.Name, pTemp.Age, pTemp.Job != null ? pTemp.Job.JobName : null, pTemp.Job != null ? pTemp.Job.JobTime : 0);//注5
      }
}

奋斗运行代码,得到结果:

 

奋斗代码说明:

  • 去掉[1]处的小括号,代码合法。同样去掉new Person(){...}中的小括号,代码也是合法的。
  • [2]此处的Job被赋值为null是合法的,只是在循环输出Person成员值时,需要对Job进行null值判断。(见[5]
  • [3]此处的Person被赋值为null,这在对象初始值设定项中同样合法,只是在循环输出集合值时,同样需要增加null值判断。(见[4])
  • 集合初始值设定项的作用对象初始值设定项作用一致,简化了初始化工作。

 

3 初始值设定项作用于匿名类型

var tiana=new{ Name="tiana",Age=28};

注意:这里的关键字“new”不可少。

 关于这点的应用,在Linq中会被经常用到,看示例代码:

var temp = from pt in pList1 select new { newName=pt.Name, newAge=pt.Age };

这句代码就不做分析了。

再见

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值