【发布时间】:2017-03-04 14:19:14
【问题描述】:
有几次我对.Cast<T> LINQ 扩展方法感到好奇。我对自己说“这听起来正是我在这种情况下所需要的”,但每当我尝试使用它时,我总是最终得到一个InvalidCaseException。我从来没有成功地使用过这种方法。这是检查异常的示例行:
Enumerable.Range(0,10).Cast<float>().ForEach(Console.Out.WriteLine);
将int 转换为float 没有任何争议,那么为什么这种方法拒绝这样做呢?我可以通过简单地将.Cast<float> 替换为.Select(x => (float)x) 来解决此问题并获得所需的效果
Enumerable.Range(0, 10).Select(x => (float)x).ForEach(Console.Out.WriteLine);
这不是太麻烦,但我还是不明白为什么Cast<float> 方法不能为我完成这项工作。
简而言之:你如何使用.Cast<T>扩展方法?
这与问题无关,但以防万一有人想知道,我在上面的代码 sn-ps 中使用了自定义 ForEach 扩展方法(标准方法仅适用于列表):
static class Extensions
{
public static void ForEach<T>(this IEnumerable<T> x, Action<T> l)
{
foreach (var xs in x) l(xs);
}
}
【问题讨论】:
-
stackoverflow.com/questions/15394032/…查看这个链接很好的解释
标签: c# linq exception casting extension-methods