Почему я не могу перебрать что-то с помощью 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(...) должно сработать.

Другие вопросы по тегам