相关疑难解决方法(0)

为什么foreach无法找到我的GetEnumerator扩展方法?

我试图使一些代码更具可读性.例如foreach(var row in table) {...}而不是foreach(DataRow row in table.Rows) {...}.

为此,我创建了一个扩展方法:

namespace System.Data {
    public static class MyExtensions {
        public static IEnumerable<DataRow> GetEnumerator( this DataTable tbl ) {
            foreach ( DataRow r in tbl.Rows ) yield return r;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但编译器仍然抛出foreach statement cannot operate on variables of type 'System.Data.DataTable' because 'System.Data.DataTable' does not contain a public definition for 'GetEnumerator'.

为了确认我正确实现了扩展方法,我尝试了以下代码,编译器没有问题.

for ( IEnumerator<DataRow> enm = data.GetEnumerator(); enm.MoveNext(); ) {
    var row = enm.Current;
    ... …
Run Code Online (Sandbox Code Playgroud)

c# foreach extension-methods

20
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×1

extension-methods ×1

foreach ×1