Rx扩展方法的命名约定?

Dre*_*rsh 5 naming-conventions system.reactive

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

难道是ToObservable被保留用于车削东西预计产品单一事件到IObservable<T>为其中AsObservable保留用于转换的东西,预计将产生的一系列事件到IObervable<T>

cwh*_*ris 6

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

请注意以下事实:

  • ToObservable期望将基于拉的序列转换为基于推的序列.
  • ToEnumerable期望将基于推的序列转换为基于拉的序列.
  • AsObservable预计将基于推送的类型包装为IObservable< T >.
  • AsEnumerable预计将基于拉的类型包装为IEnumerable< T >.

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

在大多数情况下,您将使用As自己的方法,因为已经为您编写ToObservable并且ToEnumerable已经为您编写了交叉对偶运算符.

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

  • 我将通过指出AsObservable以前命名为Hide来进一步概括上述内容.它对于隐藏底层类型很有用,尤其是在底层类型是ISubject的情况下.即使你通过一个IObservable`1的方法返回一个主题,它也可以被强制转换为主语并被篡改.Hide/AsObservable可防止此篡改.考虑到这一点,我会将从非IObservable项目的任何项目命名为IObservable'ToObservable',这包括IEnumerable源. (3认同)

Gid*_*rth 5

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