为什么我不能用 linq 迭代可以用 foreach 迭代的东西?

Why can I not iterate over something with linq that can be iterated over with foreach?

我收集了 table 行(类型 DataRowCollection)。我写的是完全有效的:

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

但以下不会编译:

myDataRowCollection.ToList();

甚至

myDataRowCollection.Select(...

这些 System.Linq 预期 DataRowCollection 没有实现的扩展是什么?

foreach()是基于模式的(docs),它实际上并不依赖于IEnumerableGetEnumerator() 够了。

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

另一方面,Linq 基于 IEnumerable<T> 的扩展方法。

您的 DataRowCollection 实现了 IEnumerable 而不是 IEnumerable<DataRow>。对于 Linq 来说太旧了。

但是有一些辅助方法可用,myDataRowCollection.AsEnumerable().Select(...)应该可以。