私はいくつかのコードをより読みやすくしようとしています。たとえば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; }
}