Почему 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;
        }
    }
}

Но компилятор все равно кидает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;
    ...
}

Прежде чем сказать, что это потому, чтоIEnumerator или жеIEnumerator<DataRow> не реализовано, учтите, что компилируется следующее:

public class test {
    public void testMethod() {
        foreach ( var i in new MyList( 1, 'a', this ) ) { }
    }
}
public class MyList {
    private object[] _list;
    public MyList( params object[] list ) { _list = list; }
    public IEnumerator<object> GetEnumerator() { foreach ( var o in _list ) yield return o; }
}

Ответы на вопрос(6)

Ваш ответ на вопрос