3

我正在开发一个基本上是实时 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 objecttoTResult并且当我连接多个时也使编译器无法从用法推断类型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>

4

1 回答 1

0

为什么不将 LiveSelect 添加到您的 ReadOnlyBindingList 以在内部进行强制转换或所需的转换?

var live = list.LiveSelect(i=> i+1)/*this returns a readonlybindinglist*/.LiveSelect(i=> i+1)/*this is the method in bindinglist*/

public ReadOnlyBindingList<T> LiveSelect(Func<T,T> lambda){
  return /* call static method that does liveselect */
}

这是扩展

public static ReadOnlyBindingList<T> LiveSelect(this BindingList<T> source, Func<T,T> lamda){
   return /*cast to readonlybindinglist and call static method that does liveselect */
}
于 2013-04-08T15:04:17.577 回答