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);

没有什么很酷的事情可以做吗?我可以制作自己的方法,但我希望有一些内置的东西。

4

4 回答 4

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());
于 2012-07-01T18:27:24.827 回答
0

是的,你可以这么做。

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

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

于 2012-07-01T18:36:02.857 回答
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();
于 2012-07-01T18:38:45.163 回答
0

根据您的替代方案,我假设优化意味着更少的代码行,而不是更有效的计算。

您的第二种选择应该使用 Linq 工作:

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

更新:正如其他人所说,可以在 .NET 4 及更高版本中删除 ToArray。

于 2012-07-01T18:45:21.683 回答