为什么我不能用 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),它实际上并不依赖于IEnumerable
。 GetEnumerator()
够了。
class A // note: no interface
{
public IEnumerator GetEnumerator() { ...}
}
另一方面,Linq 基于 IEnumerable<T>
的扩展方法。
您的 DataRowCollection
实现了 IEnumerable
而不是 IEnumerable<DataRow>
。对于 Linq 来说太旧了。
但是有一些辅助方法可用,myDataRowCollection.AsEnumerable().Select(...)
应该可以。
我收集了 table 行(类型 DataRowCollection
)。我写的是完全有效的:
foreach(var row in myDataRowCollection)
{
// Something with row
}
但以下不会编译:
myDataRowCollection.ToList();
甚至
myDataRowCollection.Select(...
这些 System.Linq 预期 DataRowCollection
没有实现的扩展是什么?
foreach()
是基于模式的(docs),它实际上并不依赖于IEnumerable
。 GetEnumerator()
够了。
class A // note: no interface
{
public IEnumerator GetEnumerator() { ...}
}
另一方面,Linq 基于 IEnumerable<T>
的扩展方法。
您的 DataRowCollection
实现了 IEnumerable
而不是 IEnumerable<DataRow>
。对于 Linq 来说太旧了。
但是有一些辅助方法可用,myDataRowCollection.AsEnumerable().Select(...)
应该可以。