C# 使用初始值设定项将项添加到列表还是添加定义的变量?

C# 使用初始值设定项将项添加到列表还是添加定义的变量?,c#,list,C#,List,我只是想问一下initializer add方法和directive-veriable add方法之间有什么区别 在以下代码之间: var list = new List<Item>(); for (int i = 0; i < 100000; i++) { list.Add(new Item() { ID = i, Title = "Item" }); } var list=newlist(); 对于(int i=0;i

我只是想问一下initializer add方法和directive-veriable add方法之间有什么区别

在以下代码之间:

var list = new List<Item>();
for (int i = 0; i < 100000; i++)
{
    list.Add(new Item() { ID = i, Title = "Item" });
}
var list=newlist();
对于(int i=0;i<100000;i++)
{
添加(新项(){ID=i,Title=“Item”});
}
该代码:

var list = new List<Item>();
for (int i = 0; i < 100000; i++)
{
    var item = new Item() { ID = i, Title = "Item" };
    list.Add(item);
}
var list=newlist();
对于(int i=0;i<100000;i++)
{
var item=new item(){ID=i,Title=“item”};
列表。添加(项目);
}
有什么不同吗? 编译程序时,它们是相同的代码吗?
如果我建立一个从100万到100万的循环,我还会得到同样的结果吗(忽略其他影响)?

没有区别。查看IL代码,查看是否必须先存储
新项()
,然后才能将其添加到列表中。但是,从代码的角度来看,第一个代码段看起来更干净。

没有区别(如果启用了优化,编译器足够聪明,可以在两种情况下生成相同的高效代码),但是您可以通过设置列表容量使代码变得更好:

int size=100000;

变量列表=新列表(大小);// 没有真正的区别,在第二个示例中,您只是将新实例化的项存储在变量中,然后再将其添加到列表中,而在第一个示例中,您实例化并添加到同一行。一旦离开括号,存储项的变量将被销毁


除非您要调试我更喜欢的第一组代码项中的内容,否则最好查看。

我编译了exe并查看了reflector上的编译代码。 以下是我的预编译源代码:

        list.Add(new Item() { ID = 2, Title = "Item" });
        Item yeni = new Item() { ID = 4, Title = "Item" };
        list.Add(yeni);
下面是编译后的代码:

private static void Main(string[] args)
{
       List<Item> list = new List<Item>();
       Item <>g__initLocal0 = new Item();
       <>g__initLocal0.ID = 2;
       <>g__initLocal0.Title = "Item";
       list.Add(<>g__initLocal0);
       Item <>g__initLocal1 = new Item();
       <>g__initLocal1.ID = 4;
       <>g__initLocal1.Title = "Item";
       Item yeni = <>g__initLocal1;
       list.Add(yeni);
}
private static void Main(字符串[]args)
{
列表=新列表();
Item g__initLocal0=新项();
g_uuinitlocal0.ID=2;
g__initLocal0.Title=“项目”;
添加(g_uuinitlocal0);
Item g__initLocal1=新项();
g_uuinitlocal1.ID=4;
g__initLocal1.Title=“项目”;
项目yeni=g_uuinitlocal1;
列表。添加(yeni);
}
我刚刚意识到编译器接受ur参数并定义一个新的veriable,然后将其添加到列表中。
谢谢大家。

如果我构建一个从100万到100万的循环,我还会得到同样的结果吗(忽略其他影响)?
--试试看。要测试代码,我们应该停止所有其他进程。必须只有我们的过程。也许有人知道这一点为了测试代码,把你放在这里的东西用秒表来确定运行时间。只需要一行额外的代码就可以了…@ArgeKumandan,为什么?那将很快完成。
private static void Main(string[] args)
{
       List<Item> list = new List<Item>();
       Item <>g__initLocal0 = new Item();
       <>g__initLocal0.ID = 2;
       <>g__initLocal0.Title = "Item";
       list.Add(<>g__initLocal0);
       Item <>g__initLocal1 = new Item();
       <>g__initLocal1.ID = 4;
       <>g__initLocal1.Title = "Item";
       Item yeni = <>g__initLocal1;
       list.Add(yeni);
}