Почему я не могу перебрать что-то с linq, что можно перебрать с foreach? - PullRequest
1 голос
/ 27 сентября 2019

У меня есть коллекция строк таблицы (тип DataRowCollection).Для меня совершенно справедливо написать:

foreach(var row in myDataRowCollection)
{
  // Something with row
}

И все же следующее не скомпилируется:

myDataRowCollection.ToList();

или даже

myDataRowCollection.Select(...

Что это за система.Расширения Linq ожидают, что DataRowCollection не реализует?

1 Ответ

6 голосов
/ 27 сентября 2019

foreach() основан на шаблонах ( документы ), фактически он не зависит от IEnumerable.GetEnumerator() достаточно.

class A // note: no interface
{
    public IEnumerator GetEnumerator() { ...} 
}

Linq, с другой стороны, основан на методах расширения для IEnumerable<T>.

Ваш DataRowCollection реализует IEnumerable, но не IEnumerable<DataRow>.Он слишком стар для Linq.

Но есть несколько вспомогательных методов, myDataRowCollection.AsEnumerable().Select(...) должен работать.

...