5

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

它是否可以ToObservable保留用于将预期产生单个事件的事物转换为IObservable<T>whereAsObservable保留用于将预期产生一系列事件的事物转换为IObervable<T>

4

2 回答 2

6

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

请注意以下事实:

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

因此,To应该在您编写切换源对偶性的方法As时使用,并且应该在生成的对偶性与源的对偶性相同时使用。

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

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

于 2013-08-18T21:42:29.427 回答
5

我不知道任何官方指导,但我会使用的主要指标是查看您正在做的工作量。在大多数情况下,需要完成大量工作(这本身就是主观的),例如将 IEnumerable 转换为 IObservable,我会使用ToObservable. 当该方法完成相当琐碎的工作时,与Observable.AsObservable扩展方法一样,AsObservable似乎是更好的选择。这两种方法之间的另一个显着区别是,AsObservable它只不过是类型转换,不会对参数的行为进行任何真正的改变,而是Observable.ToObservable(IEnumerable<T>)返回一个语义明显不同的对象。

于 2013-08-17T01:52:01.490 回答