Почему я не могу перебрать что-то с помощью linq, которое можно перебрать с помощью foreach?
У меня есть набор строк таблицы (введите DataRowCollection
). Для меня совершенно справедливо написать:
foreach(var row in myDataRowCollection)
{
// Something with row
}
Однако следующее не будет компилироваться:
myDataRowCollection.ToList();
или даже
myDataRowCollection.Select(...
Что это за расширения System.Linq, ожидающие, что DataRowCollection
не реализует?
1 ответ
Решение
foreach()
основан на шаблонах ( документы), на самом деле он не полагается наIEnumerable
. GetEnumerator()
достаточно.
class A // note: no interface
{
public IEnumerator GetEnumerator() { ...}
}
Linq, с другой стороны, основан на методах расширения для IEnumerable<T>
.
Ваш DataRowCollection
орудия IEnumerable
но нет IEnumerable<DataRow>
. Он слишком стар для Linq.
Но есть несколько вспомогательных методов, myDataRowCollection.AsEnumerable().Select(...)
должно сработать.