Rx扩展方法的命名约定?

时间:2013-08-16 23:30:01

标签: naming-conventions system.reactive

因此,如果我正在为另一个将类型转换为Rx IObservable<T>的库中的类型编写扩展方法,那么约定究竟是什么?我问,因为我认为AsObservable是要走的路,但我也见过ToObservable。我不清楚在何时或是否有任何真正的惯例时使用哪个。

是否ToObservable保留用于将预期产生单个事件的内容转换为IObservable<T>,其中AsObservable保留用于转换预期会生成序列的内容将事件转换为IObervable<T>

2 个答案:

答案 0 :(得分:6)

除非你有充分的理由编写自己的交叉对偶运算符,否则在处理Enumerables和Observables时你不需要写一个“To”后缀。

遵守以下事实:

  • ToObservable需要将基于pull的序列转换为基于推送的序列。
  • ToEnumerable应将基于推送的序列转换为基于pull的序列。
  • AsObservable应将基于推送的类型包装为IObservable< T >
  • AsEnumerable应将基于pull的类型包装为IEnumerable< T >

因此,当您编写一个切换源的二元性的方法时,应使用To,并且当得到的二元性与源的相同时,应使用As

在大多数情况下,您将As用于自己的方法,因为ToObservableToEnumerable的交叉对偶运算符已经为您编写。

来源:个人经验,MSDN文档(上图),Erik Meijer本人。

答案 1 :(得分:5)

我不知道任何官方指导,但我会使用的主要指标是查看您正在做的工作量。对于大多数情况,有一些非常重要的工作(这本身就是主观的),例如将IEnumerable转换为IObservable,我会使用ToObservable。当该方法执行相当简单的工作时,与Observable.AsObservable扩展方法一样,AsObservable似乎是更好的选择。这两种方法之间的另一个显着区别是AsObservable不仅仅是类型转换,并且不会对参数的行为进行任何实际更改,但Observable.ToObservable(IEnumerable<T>)返回具有显着不同语义的对象。