在初始化之前或之后添加新项目到列表?

时间:2010-04-01 00:57:20

标签: c#

您更喜欢哪个?

var foo = new Foo();

foo.Prop1 = "1";
foo.Prop2 = "2";
// etc...

this.Foos.Add(foo);

var foo = new Foo();
this.Foos.Add(foo);

foo.Prop1 = "1";
foo.Prop2 = "2";
// etc...

7 个答案:

答案 0 :(得分:7)

这大多数是个人偏好与具体原因,但我更喜欢首先因为我发现它是更直接的方法。它遵循我对这个问题的思考方式。它似乎只是向后添加到列表然后初始化值。

我首选的一个具体原因是它对代码中的更改更具弹性。例如,如果Foo后来从一个类更改为一个结构,它将破坏方案#2而不是#1。这是一个相当遥远的案例。

在C#3及更高版本中,您还可以使用集合初始值设定项来简化此操作。

this.Foos.Add(new Foo() { Prop1="1"; Prop2="2" });

答案 1 :(得分:0)

我喜欢第一个变体。它在逻辑上听起来更容易理解。

答案 2 :(得分:0)

我更喜欢使用以下内容初始化属性:(C#3或更高版本)

this.Foos.Add(new Foo() { Prop1 = 1, Propr2 = 2 });

答案 3 :(得分:0)

我更喜欢第一个,因为在完成对象之前完全初始化对象似乎更简洁。此外,在将对象传递给可能对对象本身产生副作用的方法之前,最好确保已正确初始化它以避免任何InvalidOperationExceptions。您永远不知道Add方法是否需要初始化foo.Prop1

答案 4 :(得分:0)

在做WinForm或ASP.Net时,我会选择First方法,虽然在性能方面没有区别。我这样做是因为我似乎初始化了所有东西并把对象放到了它的位置,而不是我把东西放在那里并一次又一次地改变它。只是个人喜好。

答案 5 :(得分:0)

第一个,因为:

  • 它保留了逻辑上的代码 耦合得更近(所有代码设置 属性,属性和整体 努力工作比foo更近 foo被视为a的代码 单位在更大的背景下是 收集所有foos);

  • 你永远不知道是否要添加Foo foos的集合可能会加深 复制(而不是浅 参考)所以,假设意图是 设置所有这些属性 我在集合中的实例 始终设置之前的属性 将foo传递给任何可能或的方法 可能无法为其创建别名

答案 6 :(得分:0)

一个旧线程......

当你搜索一个项目时,如果没有找到就创建一个新项目,如果找到就更改它呢?

例如

var item=foos.FirstOrDefault(x=>x.Prop1=="1");
if (item==default)
{
   item=new Foo();
   foos.Add(item);
}

item.Prop2="2";