.NET Portable - 在字符串上调用 .Select()

.NET Portable - Calling .Select() on a string

我正在尝试从 PCL 中对字符串调用 .Select() Linq 扩展方法,但我无法编译该项目。对来自单独的、不可移植的项目的字符串调用 .Select() 是可编译的。我可以看到 .Select() 接受了 this IEnumerable<TSource> source。字符串(和字符串)类型在 .NETPortable 程序集内部实现 IEnumerable,那么为什么 .Select() 不可用?由于某种原因,编译器不能将字符串隐式转换为带有 PCL 的字符数组吗?

编译器需要将 string 隐式转换为 IEnumerable<char>

这是否有效取决于您使用可移植库的目标平台,以及可用的 .NET Framework 子集。如果您以 .NET Framework 4 和例如 Xamarin 为目标,则与您以 .NET Framework 4.5.1 和 Xamarin 为目标相比,您拥有一个不同的子集。在前一种情况下,编译器将拒绝从 stringIEnumerable<char> 的隐式转换,而在后一种情况下,它会被接受。

因此,简单的解决方案(如果它对您来说可行)是针对 .NET Framework 4.5.1 及更高版本。否则,您可以将字符串转换为字符序列,例如,使用 .Cast<char>().