我在VS2008一个.NET 3.5项目,我试图用这个过载的string.Join()(就是那个需要string和IEnumerable<T>)和编译器似乎并不知道这个过载.
这是我试过的代码
var result = string.Join(" ", Foo());
Run Code Online (Sandbox Code Playgroud)
这里Foo()是
IEnumerable<string> Foo()
{
foreach(string s in new []{"1", "2", "3"} )
{
yield return s;
}
}
Run Code Online (Sandbox Code Playgroud)
我明白了
> Error 2 Argument '2': cannot convert from
> 'System.Collections.Generic.IEnumerable<string>' to 'string[]'
Run Code Online (Sandbox Code Playgroud)
当然,如果我使用Foo().ToArray()它有效,但我想知道为什么过载IEnumerable<T>不起作用.
经典视图中的MSDN表示它与vs2008/.net 3.5兼容

(我在非经典视图中找不到"此页面特定于......"的消息,所以我想我会设置一个屏幕截图.)
Ant*_*ram 15
所述string.Join过载接受IEnumerable<T>未添加直到.NET 4它不是在.net 3.5可用.MSDN文档中的经典视图完全不正确.
在.NET 3.5中,你将需要调用ToArray()上IEnumerable<string>,以将其传递到Join方法.
string.Join(" ", Foo().ToArray());
Run Code Online (Sandbox Code Playgroud)
底部的版本信息说明了不同之处:

请注意,您可以在文章底部找到该版本信息,无论选择的视图如何(它可能看起来有点不同).
您找到的右上角的注释是指您可以在URL中找到的所选资源版本,例如:
http://msdn.microsoft.com/en-us/library/dd783876(VS.90).aspx
(以粗体突出显示).通常这也会选择框架版本(因为这些版本与VS一起发布),但显然这里的分类似乎存在错误.
我只是把它报告为错误.