C#对象/列表初始值设定项语法的优点是什么? 初始化大量静态对象时是否有速度提升 是否有编译时间或其他优点
e、 g:C#对象/列表初始值设定项语法的优点是什么? 初始化大量静态对象时是否有速度提升 是否有编译时间或其他优点,c#,initializer-list,initializer,C#,Initializer List,Initializer,e、 g: IList对象=新列表 { 新对象(), 新对象(), 新对象() }; vs: IList<object> objects = new List<object>(); objects.Add(new object()); objects.Add(new object()); objects.Add(new object()); IList objects=new List(); 添加(新对象()); 添加(新对象()); 添加(新对象()); 这两段代码
IList对象=新列表
{
新对象(),
新对象(),
新对象()
};
vs:
IList<object> objects = new List<object>();
objects.Add(new object());
objects.Add(new object());
objects.Add(new object());
IList objects=new List();
添加(新对象());
添加(新对象());
添加(新对象());
这两段代码之间没有运行时差异。它们都将编译成相同的IL
初始化器语法的主要优点是,它基本上是在单个表达式中初始化列表,而不是跨多个语句初始化列表。例如,您可以使用它从方法返回列表,而无需显式创建临时变量(编译器会为您创建此临时变量):
public List MakeListOf3(T val)
{
返回新列表{val,val,val};
}
与之相反:
public List<T> MakeListOf3<T>( T val )
{
var list = new List<T>();
list.Add( val );
list.Add( val );
list.Add( val );
return list;
}
public List MakeListOf3(T val)
{
var list=新列表();
列表。添加(val);
列表。添加(val);
列表。添加(val);
退货清单;
}
这是非常做作的,但是你明白了。这两段代码之间没有运行时差异。它们都将编译成相同的IL 初始化器语法的主要优点是,它基本上是在单个表达式中初始化列表,而不是跨多个语句初始化列表。例如,您可以使用它从方法返回列表,而无需显式创建临时变量(编译器会为您创建此临时变量):
public List MakeListOf3(T val)
{
返回新列表{val,val,val};
}
与之相反:
public List<T> MakeListOf3<T>( T val )
{
var list = new List<T>();
list.Add( val );
list.Add( val );
list.Add( val );
return list;
}
public List MakeListOf3(T val)
{
var list=新列表();
列表。添加(val);
列表。添加(val);
列表。添加(val);
退货清单;
}
这很做作,但你明白了。这基本上是一种句法上的糖分,是个人品味和美学的问题 另外,值得一提的是,可以组合集合初始值设定项和对象初始值设定项。您可以在一次运行中构建相当复杂的结构,例如:
Product product = new Product
{
Name = "Dog food",
Price = 9.95,
Manufacturer =
{
Name = "Dog food producer"
Location = "Some location"
},
SimilarProducts =
{
new Product { Name = "Cat food" },
new Product { Name = "Bird food", Price = 5.50},
new Product
{
Name = "Guinea Pig food",
Price = 5.50
SimilarProducts =
{
new Product { Name = "Guinea Pig shampoo" },
new Product { Name = "Guinea Pig toofpaste" }
},
},
},
}
这基本上是一种句法上的糖分,是个人品味和美学的问题 另外,值得一提的是,可以组合集合初始值设定项和对象初始值设定项。您可以在一次运行中构建相当复杂的结构,例如:
Product product = new Product
{
Name = "Dog food",
Price = 9.95,
Manufacturer =
{
Name = "Dog food producer"
Location = "Some location"
},
SimilarProducts =
{
new Product { Name = "Cat food" },
new Product { Name = "Bird food", Price = 5.50},
new Product
{
Name = "Guinea Pig food",
Price = 5.50
SimilarProducts =
{
new Product { Name = "Guinea Pig shampoo" },
new Product { Name = "Guinea Pig toofpaste" }
},
},
},
}
1-这是一种更具可读性、更少繁琐的语法。2-
新建对象()
没有任何意义。3-使用var
而不是两次键入相同的内容IList objects=new List()代码>在同一行代码中。C#不是java。4-不,它不提供任何运行时好处。它编译为相同的IL。对代码中的每个对象使用var不是都会增加大量编译时开销吗?:)我学会了在像IDictionary这样的大名对象上谨慎地使用它。。。。对编译器来说,推断一个类型是一件微不足道的工作@HighCore我认为你应该把它作为答案而不是评论来写好吧,太棒了,每天都能学到很多东西:)还有,是的@HighCore,请把解决方案作为答案来写,这样我就可以标记它了。1-这是一种更具可读性、更少陈词滥调的语法。2-新建对象()
没有任何意义。3-使用var
而不是两次键入相同的内容IList objects=new List()代码>在同一行代码中。C#不是java。4-不,它不提供任何运行时好处。它编译为相同的IL。对代码中的每个对象使用var不是都会增加大量编译时开销吗?:)我学会了在像IDictionary这样的大名对象上谨慎地使用它。。。。对编译器来说,推断一个类型是一件微不足道的工作@HighCore我认为你应该把它作为答案而不是评论来写好吧,好吧,太棒了,每天都能学到很多东西:)还有,是的@HighCore,请把解决方案作为答案来写,这样我就可以标记它了。