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 };
这句代码就不做分析了。