在for或foreach循环中处理对象的最佳实践是什么?我们应该在循环外创建一个对象并重新创建它(使用new ...)或者为每个循环迭代创建一个新对象吗?
例:
foreach(var a in collection)
{
SomeClass sc = new SomeClass();
sc.id = a;
sc.Insert();
}
Run Code Online (Sandbox Code Playgroud)
要么
SomeClass sc = null;
foreach(var a in collection)
{
sc = new SomeClass();
sc.id = a;
sc.Insert();
}
Run Code Online (Sandbox Code Playgroud)
哪个更好?
Mar*_*ers 67
第一种方法更好,因为它更清楚地传达了变量的预期范围,并防止错误意外地使用超出预期范围的对象.
想要使用第二种形式的一个原因是,如果您想要突破循环并仍然引用您最后在循环中到达的对象.
选择第二种形式的一个不好的理由是表现.乍一看,第二种方法可能使用较少的资源,或者您只创建一个对象并重复使用它.这不是这种情况.在循环内重复声明变量不会消耗任何额外的资源或时钟周期,因此在循环外拉动声明不会获得任何性能优势.
Eri*_*ert 12
首先,我注意到当你说"创建对象"时,你的意思是"创建变量 ".对象引用放在变量中,但它们本身不是变量.
请注意,当循环包含匿名函数且变量是匿名函数的封闭外部变量时,您描述的场景引入了语义差异.看到
http://ericlippert.com/2009/11/12/closing-over-the-loop-variable-considered-harmful-part-one/
详情.
归档时间: |
|
查看次数: |
6863 次 |
最近记录: |