私は基本的にライブ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
からどこにでもキャストを追加することを余儀なくされ、また、複数の を連結すると、コンパイラが使用法から型を推測できなくなり、コードが次のようになる必要があります。object
TResult
LiveSelect
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>
?