将一个数组内联转换为字符串

3
什么是将整数数组转换为内联枚举元素的最简洁方法?我在考虑像执行转换的匿名函数这样的东西。
var array = new int[] { 1, 2 }
var s = string.Format("{0}", 
                      new [] 
                      { /*inline transform array into the string "1, 2"*/ });
4个回答

7

使用 string.Join 方法。在 .NET 3.5 及更早版本中,您需要先将其转换为字符串数组;在 .NET 4 中有一个重载方法可以接受 IEnumerable<T>。因此,根据您使用的版本:

.NET 2.0 或 3.0 / C# 2:

string s = string.Join(", ",
    Array.ConvertAll(delegate(int x) { return x.ToString(); });

.NET 2.0 or 3.0 / C# 3:

string s = string.Join(", ", Array.ConvertAll(x => x.ToString());

.NET 3.5 / C# 3:

string s = string.Join(", ", array.Select(x => x.ToString()).ToArray());

(如果您喜欢,也可以使用适用于.NET 2.0的版本)。

.NET 4:

string s = string.Join(", ", array);

我今天之前甚至都没有看到过这个!

3

使用String.Join,适用于.NET 4.0:

var s = String.Join(", ",array);

这个可以工作是因为String.Join现在有一个重载,它接受IEnumerable<T>。
对于3.5版本,您可以使用:
var s = String.Join(", ", array.Select(n => n.ToString()).ToArray());

对于之前的 .NET 版本,请参见 Jon Skeet 的更完整答案。


@Jon - 它不会使用 Join<T>(string, IEnumerable<T>) 重载吗? - Nick Craver
+1 - 我没想到那会起作用。Doh...我没看到 IEnumerable<T> 重载(.NET 4 中新增的)。 - Jon Skeet
@Jon 谢谢,我已经编辑回原始答案了;在我信任的编译器确认后 :-) - driis

1

0

ReSharper 给了我类似于:

    public static string EnumerateToString(this int[] a, string separator)
    {
        return a.Aggregate("", (current, i) => current + i.ToString(separator));
    }

这可能会变得非常缓慢,因为它将在每次迭代中复制字符串。基本上,您最终会得到O(n ^ 2)的复杂度。 - Jon Skeet

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