.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 为目标相比,您拥有一个不同的子集。在前一种情况下,编译器将拒绝从 string
到 IEnumerable<char>
的隐式转换,而在后一种情况下,它会被接受。
因此,简单的解决方案(如果它对您来说可行)是针对 .NET Framework 4.5.1 及更高版本。否则,您可以将字符串转换为字符序列,例如,使用 .Cast<char>()
.
我正在尝试从 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 为目标相比,您拥有一个不同的子集。在前一种情况下,编译器将拒绝从 string
到 IEnumerable<char>
的隐式转换,而在后一种情况下,它会被接受。
因此,简单的解决方案(如果它对您来说可行)是针对 .NET Framework 4.5.1 及更高版本。否则,您可以将字符串转换为字符序列,例如,使用 .Cast<char>()
.