之间有什么区别吗?
var list = new List<UserType>
{
new UserType(...),
new UserType(...),
};
和
var list = new List<UserType>()
{
new UserType(...),
new UserType(...),
};
我曾经常常使用第二个认为我只需要调用列表的无参数(或任何其他)构造函数...
答案 0 :(得分:5)
它是一样的。来自MSDN:
使用对象初始值设定语法可以为a指定参数 构造函数或省略参数(和括号语法)
同样的规则适用于列表和普通对象初始值设定项:
var foo = new Bar {
Prop = "value"
};
答案 1 :(得分:3)
不,没有区别。生成的IL 完全相同:
IL_0001: newobj System.Collections.Generic.List<UserQuery+UserType>..ctor
IL_0006: stloc.1 // <>g__initLocal0
IL_0007: ldloc.1 // <>g__initLocal0
IL_0008: newobj UserQuery+UserType..ctor
IL_000D: callvirt System.Collections.Generic.List<UserQuery+UserType>.Add
IL_0012: nop
IL_0013: ldloc.1 // <>g__initLocal0
IL_0014: newobj UserQuery+UserType..ctor
IL_0019: callvirt System.Collections.Generic.List<UserQuery+UserType>.Add
IL_001E: nop
IL_001F: ldloc.1 // <>g__initLocal0
IL_0020: stloc.0 // list
即使实例化一个新的List
并且自己调用.Add
也非常相似,即:
var list = new List<UserType>();
list.Add(new UserType());
list.Add(new UserType());
...生成:
IL_0001: newobj System.Collections.Generic.List<UserQuery+UserType>..ctor
IL_0006: stloc.0 // list
IL_0007: ldloc.0 // list
IL_0008: newobj UserQuery+UserType..ctor
IL_000D: callvirt System.Collections.Generic.List<UserQuery+UserType>.Add
IL_0012: nop
IL_0013: ldloc.0 // list
IL_0014: newobj UserQuery+UserType..ctor
IL_0019: callvirt System.Collections.Generic.List<UserQuery+UserType>.Add
略有不同 - 看起来不同的是生成临时变量并将其分配给list
与直接创建和操作list
。