Как правило, используйте Cast()
или OfType()
. Оба преобразуют неуниверсальный IEnumerable
в общий с указанным типом элемента - разница состоит в том, как они конвертируют каждый элемент. Cast
будет разыгрывать каждый элемент, что означает, что он выдает исключение, если вы попросите его выполнить преобразование, которое он не может обработать. OfType
просто пропускает элементы неправильного типа.
Подробнее см. В блоге Edulinq об этих операторах .
Что касается различия между этими двумя типами - неуниверсальный тип существовал до дженериков, в основном, и, следовательно, не безопасен для типов; Current
свойство IEnumerator
это просто object
вместо определенного типа. (Кроме того, IEnumerator
не реализует IDisposable, тогда как IEnumerator<T>
делает.) Если вы новичок в дженериках, это больше, чем можно легко найти в ответе здесь ...