2012-07-01 127 views
1

这很简单。这个小代码可以优化吗?

List<string> stringArr = new List<string>(); 
foreach (var item in db.IconTags) 
{ 
    stringArr.Add(item.Tag); 
} 
string outPut = string.Join(",", stringArr); 

我想这是可以说,例如:

string outPut = string.Join(",", db.IconTags.Select(t => t.Tag).ToTArray()); 

或者梅比

string outPut = string.Join(",", db.IconTags, t => t.Tag); 

是不是有一些很酷的东西,你可以做什么?我可以让我自己的方法,但我希望那里是一些建立

回答

5

在.NET 4或更新版本,你可以这样写:

string output = string.Join(",", db.IconTags.Select(t => t.Tag)); 

在.NET 3.5,你需要添加一个调用ToArray

string output = string.Join(",", db.IconTags.Select(t => t.Tag).ToArray()); 
+0

我试过了!不知道为什么我认为我不可能感谢男人:) – BjarkeCK

0

是的,你可以做到这一点。

如果你的目标是你第一个代码作品的框架版本,你的第一个愿望也可以。它甚至没有.ToArray(),因为String.Join方法需要IEnumerable<string>

在框架3.5中,您需要.ToArray(),但在框架3.5中,您的第一个代码也不起作用。

0

如果你想保持对象实例化/λ功能下降的数量会根据您的选择,我通过优化假设你的意思是较少的代码行,而不是更有效也可以做

StringBuilder builder = new StringBuilder(); 
for(var item in db.IconTags) { 
    builder.Append(item.Tag).Append(","); 
} 
// We have one extraneous , so remove it 
if(builder.Length > 1) { 
    builder.Remove(builder.Length - 1, 1); 
} 
String output = builder.ToString(); 
0

computationaly。

你的第二个选择应该使用LINQ工作:

string.Join(",", db.IconTags.Select(iconTag => iconTag.Tag).ToArray()); 

更新:正如其他人说的ToArray可以在.NET 4和更高的被丢弃。