heh*_*les 10 c# linq casting enumerable
假设我有一个IEnumerable<int>,我希望将它们转换为ASCII等效字符.
对于一个整数,它只是(char)i,所以总是collection.Select(i => (char)i),但我认为这将是一个有点清洁使用collection.Cast().
任何人都可以解释为什么我InvalidCastException在使用时得到的collection.Cast<char>()却没有collection.Select(i => (char)i)?
编辑:有趣的是,当我打电话时,collection.OfType<char>()我得到一个空集.
And*_*per 11
的Cast<T>和OfType<T>方法仅执行参考和取消装箱转换.因此,他们无法将一种值类型转换为另一种值类型.
这些方法在非泛型IEnumerable接口上运行,因此它们实际上是从转换IEnumerable<object>为IEnumerable<T>.因此,您无法使用Cast<T>转换IEnumerable<int>为的IEnumerable<char>原因是您无法将盒装int转换为char.
实际上,Cast<char>在您的示例中失败,因为以下操作失败:
object ascii = 65;
char ch = (char)ascii;   <- InvalidCastException
有关详细信息,请参阅Jon Skeet的优秀EduLinq帖子.
| 归档时间: | 
 | 
| 查看次数: | 2404 次 | 
| 最近记录: |