string.Join需要采用数组而不是IEnumerable的原因是什么?

sbi*_*sbi 10 c#

正如标题所说:为什么string.Join需要采用数组而不是IEnumerable?这让我很烦,因为当我需要从LINQ表达式的结果创建一个连接字符串时,我必须添加一个.ToArray().

我的经验告诉我,我在这里遗漏了一些明显的东西.

jas*_*son 9

升级到.NET 4.0并使用接受的重载IEnumerable<string>.否则,只是接受这是一个长期未解决的问题,直到.NET 4.0才解决.您也可以通过创建自己的扩展方法来解决问题!

public static class StringEnumerableExtensions {
    public static string Join(this IEnumerable<string> strings, string separator) {
        return String.Join(separator, strings.ToArray());
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

IEnumerable<string> strings;
Console.WriteLine(strings.Join(", "));
Run Code Online (Sandbox Code Playgroud)


Luk*_*keH 8

JoinIEnumerable<T>在.NET 4中引入了引发争议的超载 - 如果你不使用.NET 4,那么我担心你会因传递数组或编写自己的实现而陷入困境.

我猜测的原因很简单,当框架首次设计时,它被认为不够重要.IEnumerable<T>LINQ的引入变得更加突出.

(当然,.NET在设计时没有泛型类型,但IEnumerable如果他们认为值得的话,他们没有理由不能使用普通的非泛型.)

而且也没有理由,你为什么不能推出自己的版本,Join这需要一个IEnumerable<T>,如果你觉得你需要它,你就无法升级到.NET 4.