2010-04-14 59 views

回答

2

好了,除了一个循环中创建新对象的轻微代码味道,我能看到你里面创建一个StringBuilder for循环生成在每个项目的长字符串for循环。

但是,您也可以将其范围限制在for循环之外并在每次传递时将其清除。取决于你如何认为它会更容易阅读。

+0

“在循环内创建新对象的轻微代码气味” - 这怎么可能是“代码味道”?每个Linq到对象的查询都是一个循环(或多个循环),它们总是可以随时创建对象。 – 2010-04-14 18:13:30

+0

你只是想看看你在循环内做什么。在这种情况下,没有问题。有可能你可能会创建一堆带有副作用的对象,导致他们稍后出现问题。正如我所说,这只是一个小问题,但在创建非价值对象时需要考虑一些问题。 – 2010-04-14 18:17:05

0

如果你是在与另一个外部StringBuilder结合使用它。

StringBuilder sbAll = new StringBuilder(); 
for (int i=0; i<cnt; i++) { 
    .... 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.append(","); 
     sbAll.append(sb.toString()); 
    } 
} 

问题是你在循环里面做了什么,它足够可爱,需要一个单独的StringBuilder?我想这是可能的。

0

如果内循环后面的代码正在做一些需要大量内存的事情,并且内循环内的StringBuilder也很大,那么您可能希望将它放在本地范围内,以便它可以被GC之后免费记忆。否则,我同意JBristow它应该在循环外部作用域,并在内部循环开始时清除(可能还有trimToSize()'d)。