为 IObservable 实现自己的运算符

可以通过为 LINQ 库未提供的操作添加新运算符,或通过创建自己的标准查询运算符实现来提高可读性和性能来扩展 Rx。 如果要使用内存中对象进行操作,并且当预期的自定义项不需要查询的全面视图时,编写标准 LINQ 运算符的自定义版本非常有用。

新建运算符

LINQ 提供了一组完整的运算符,这些运算符涵盖对一组实体的大多数可能操作。 但是,可能需要运算符来向查询添加特定的语义含义,尤其是在可以在代码中多次重复使用同一运算符时。

许多现有的 LINQ 运算符实际上是使用其他基本 LINQ 运算符构建的。 例如,SelectMany 运算符是通过组合 Select 和 Merge 运算符生成的,如以下代码所示。

public static IObservable<TResult> SelectMany<TSource, TResult>( this IObservable<TSource> source, Func<TSource, IObservable<TResult>> selector) 
{ 
   return source.Select(selector).Merge(); 
} 
In t

通过在生成新 LINQ 运算符时重用现有 LINQ 运算符,可以利用 Rx 库中实现的现有性能或异常处理功能。

编写自定义运算符时,最好不要让任何一次性设备未使用;否则,你可能会发现资源实际上可能被泄露,取消可能无法正常工作。

自定义现有运算符

向 LINQ 添加新运算符是扩展其功能的一种方式。 但是,还可以通过将现有运算符包装成更专业且有意义的运算符来提高代码可读性。