我正在开发一个基本上是实时 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
需要采用 a ReadOnlyBindingList<T>
,这将迫使我添加一个扩展方法AsReadOnly
,该方法将采用 aBindingList<T>
并将其包装到继承自的类中ReadOnlyBindingList<T>
,因此我的代码如下所示:
ReadOnlyBindingList<int> live = list1.AsReadOnly().Select(i => i + 1).Select(i => i * i);
或者有LiveSelect
一个IBindingList
并被迫在任何地方添加强制转换 from object
toTResult
并且当我连接多个时也使编译器无法从用法推断类型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>
?