Eri*_*rix 1 c# generics ienumerable c#-4.0
我真的很喜欢使用IEnumerable扩展方法.
但有时我最终会得到一些只实现IEnumerable的集合,因此它们不可用.将集合转换为可以使用这些方法的表单的最简单方法是什么?
更一般地说,有人可以向我解释这两种类型之间的区别以及为什么这些方法对于新的IEnumerable存在的历史背后的历史?
Jon*_*eet 11
一般来说,使用Cast()或OfType().两者都将非泛型转换为IEnumerable具有指定元素类型的泛型 - 不同之处在于它们如何转换每个元素.Cast将转换每个元素,这意味着如果您要求它执行它无法处理的转换,它会抛出异常.OfType只是跳过不正确类型的元素.
有关这些运算符的更多信息,请参阅Edulinq博客文章.
至于两种类型之间的区别 - 非泛型类型在泛型之前存在,基本上,因此不是类型安全的; 该Current物业IEnumerator 只是object,而不是一个特定的类型.(另外,IEnumerator没有实现IDisposable,而是IEnumerator<T>.)如果你是普通人的新手,那么这里的答案很容易被覆盖......