Почему Foreach не может найти мой метод расширения GetEnumerator?C#

Место общения программистов C#
Ответить
Anonymous
 Почему Foreach не может найти мой метод расширения GetEnumerator?

Сообщение Anonymous »

Я пытаюсь сделать какой -то код более читабельным. Например, Foreach (var war in table) {...} , а не Foreach (строка данных в таблице. > для этого я создал метод расширения: < /p>

namespace System.Data {
public static class MyExtensions {
public static IEnumerable GetEnumerator( this DataTable tbl ) {
foreach ( DataRow r in tbl.Rows ) yield return r;
}
}
}
< /code>

Но компилятор по -прежнему выбрасывает оператор Foreach не может работать на переменных типа 'system.data.datatable', потому что 'System.data.datatable' не содержит публичного определения для 'GetEnumerator' .

, чтобы подтвердить, что я внедрил метод расширения, я вместо этого попробовал следующий код, и у компилятора не было проблем с ним.

for ( IEnumerator enm = data.GetEnumerator(); enm.MoveNext(); ) {
var row = enm.Current;
...
}


, прежде чем вы скажете, что это потому, что ienumerator или ienumerator не реализован, считайте, что следующее выполняет компилирование:

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 GetEnumerator() { foreach ( var o in _list ) yield return o; }
}


Подробнее здесь: https://stackoverflow.com/questions/141 ... ion-method
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»