优雅简化所提供的代码的方法

3
假设这里有一个列表:
var rawItems = new List<KeyValuePair<string, string>>()
{
    new KeyValuePair<string,string>("A", "1"),
    new KeyValuePair<string,string>("B", "2"),
    new KeyValuePair<string,string>("C", "3")
};

需要构建一个以下形式的字符串:

A = 1,
B = 2,
C = 3

正在使用的方法:
List<string> transformedItems = new List<string>();
rawItems.ForEach(item => transformedItems.Add(item.Key + " = " + item.Value));
string result = String.Join("," + Environment.NewLine, transformedItems.ToArray());

如果有更加优雅的方法解决这个问题,我会非常高兴地接受。

附:并不一定需要像“将代码压缩成一行”的解决方案,而是希望有别的方式。


1
我认为它现在的样子非常优雅。 - Thanos Markou
1
如果你想要速度,使用Tuple<string, string>。 - Yohanes Nurcahyo
1
@ThanosMarkou,有更好的方法。请查看被接受的答案。 :) - anar khalilov
@YohanesNurcahyo,我不知道这个。谢谢你的提示。 - anar khalilov
2个回答

11

也许你会觉得这很“优雅”:

var result = string.Join(",\r\n", rawItems.Select(
                                  x => string.Format("{0} = {1}", x.Key, x.Value)));

1
找了好久终于找到了这个,太棒了! - anar khalilov
据我所知,在Windows平台上"\r\n"等同于Environment.NewLine。你使用它是为了简洁吗? - anar khalilov
@Anar 是的,如果你愿意,你可以使用 Environment.NewLine。我想保持简洁。 - Yuval Itzchakov

2

我通常会在某个静态类中为Join定义一个扩展方法:

static string StringJoin<T>(this IEnumerable<T> values, string separator)
{
    return string.Join(separator, values);
}

然后,您可以将您的代码重写为以下形式:
string result =
    rawItems
        .Select(item => item.Key + " = " + item.Value)
        .StringJoin("," + Environment.NewLine);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接