问题 为什么String类没有在可移植库中实现IEnumerable ?


我创建了一个针对.NET Framework 4和Silverlight 5的PCL项目(​​我使用Visual Studio 2010的扩展,而不是Visual Studio 2012中的可移植项目模板,如果这很重要)。 我正在尝试使用反转字符串 System.Linq.Enumerable.Reverse<TSource>() 扩展方法,但它不起作用,因为编译器认为 System.String 没有实现 IEnumerable<char>


1115
2017-07-19 09:20


起源

你确定它没有实现 IEnumerable<char>或者是Intellisense只是隐藏它? - CodesInChaos
是的,我确信,当我尝试构建它时会出现错误。 - Andrew Khmylov
嗯刚检查了文档,并且 GetEnumerator 确实不是PCL的一部分。什么是MS思考...... - CodesInChaos
您能在这里发布文档链接吗?谢谢。 - Andrew Khmylov
MSDN上的字符串类 向下滚动到 GetEnumerator 并注意丢失的PCL图标。 - CodesInChaos


答案:


可移植类库必须将自己限制在它承诺支持的所有目标平台上可用的类和方法。这里最大的麻烦制造者是WinRT,CLR有一个语言投影,可以将WinRT类型映射到托管类型。投影不支持的System.String方法记录在 这个答案。 GetEnumerator()就是其中之一。


13
2017-07-19 12:12



这是有道理的,因为我没有选择WinRT(实际上,它在框架选择窗口中称为Metro风格应用程序的.NET)作为目标框架。我猜PCL应该作为选定平台/框架的交集。 - Andrew Khmylov
好吧,PCL的重点在于你 威力 有一天选择WinRT。 - Hans Passant
似乎我们在这里略有不同的愿景,但我现在将接受你的答案,因为我没有看到任何其他有意义的观点。谢谢! - Andrew Khmylov
我不明白为什么有一天你可能会选择WinRT。有一天我可能会选择xbox,但这并不意味着PCL总是局限于xbox可以做的事情。你能解释一下吗? - pauldendulk
@Paul - 你为什么不问一个关于它的问题? - Hans Passant