私たちは、基本クラスを調整可能な派生クラスに拡張することによって、サードパーティのコードを適用することに取り組んでいます。 IEnumerableを返す1つのメソッドとは別に、すべてがうまく機能しています。IEnumerable .NETをオーバーライドします。
問題がどこにあるかを正確にテストするためにいくつかのsudoコードを作成しました。簡単な例で再作成できます。
この例では、メソッド内のコードブロックは決して呼び出されません。私たちはそこにブレークポイントを置いていますが、すぐにスローされる例外が追加されました。結果は常に同じです。デバッガは行をスキップします。
誰かが間違っていることを説明できますか?サードパーティのコードが単に機能しない可能性はありますか?
public class Test
{
public virtual IEnumerable GetList(Type type, string key)
{
throw new NotImplementedException();
}
}
public class Test2 : Test
{
public override IEnumerable GetList(Type type, string key)
{
for (var x = 0; x <= 5; x++)
{
yield return x;
}
}
}
static void Main(string[] args)
{
var x = new Test2();
var y = x.GetList(typeof(decimal), "test") as List<int>;
}
編集:いいえ、たくさんの問題がyieldキーワードでした。これはサードパーティの実装であるため、仮想メソッド内のコードのみを変更できます。結局、私はIEnumerableをループから戻ってくるのではなく、返すことになりました。
これにより、コードが第三者のライブラリ内で動作するようになりました。
イテレータメソッドであるため、メソッドのコードは、列挙が開始されるまで実際には入力されません。 'foreach'で。 –