这很简单。
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);
你能做些什么吗?我可以制作自己的方法,但我希望有一些内容。
答案 0 :(得分: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());
答案 1 :(得分:0)
是的,你可以这样做。
如果您的目标是首次编码的框架版本,那么您的第一个愿望也会有效。它甚至可以在没有.ToArray()
的情况下运行,因为String.Join
方法需要IEnumerable<string>
。
在框架3.5中,您需要.ToArray()
,但在框架3.5中,您的第一个代码也不起作用。
答案 2 :(得分:0)
如果你想保持对象实例化/ lambda函数的数量,你也可以
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();
答案 3 :(得分:0)
基于您的替代方案,我认为通过优化您意味着更少的代码行,而不是更有效的计算。
你的第二个选择应该使用Linq:
string.Join(",", db.IconTags.Select(iconTag => iconTag.Tag).ToArray());
更新:正如其他人所说,ToArray可以在.NET 4及更高版本中删除。