私は基本的にライブlinqである小さなライブラリに取り組んでいます。私は次のようなことができるはずです:
var list1 = new BindingList<int>();
ReadOnlyBindingList<int> live = list1.LiveSelect(i => i + 1);
これは、私ReadOnlyBindingListが作成した一般的な抽象クラスで、 を実装していますIBindingListが、継承はしていませんBindingList<T>。このLiveSelectメソッドはリストを受け取り、抽象クラスBindingList<T>を実装するクラスを返します。ReadOnlyBindingList<T>今、私はできるようにしたい:
ReadOnlyBindingList<int> live = list1.LiveSelect(i => i + 1).LiveSelect(i => i * i);
しかし、これを行うには、LiveSelectを取得する必要があり、 を取得して から継承するクラスにラップReadOnlyBindingList<T>する拡張メソッドを追加するAsReadOnly必要があるため、コードは次のようになります。BindingList<T>ReadOnlyBindingList<T>
ReadOnlyBindingList<int> live = list1.AsReadOnly().Select(i => i + 1).Select(i => i * i);
または、 をLiveSelect取り、toIBindingListからどこにでもキャストを追加することを余儀なくされ、また、複数の を連結すると、コンパイラが使用法から型を推測できなくなり、コードが次のようになる必要があります。objectTResultLiveSelect
var live = list.LiveSelect(i => i + 1).LiveSelect<int, int>(i => i + 1);
コードを次のようにする方法はありますか。
var live = list.LiveSelect(i => i + 1).LiveSelect(i => i + 1);
はどこlistですかBindingList<int>?