您更喜欢哪个?
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...
答案 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";