来自IEnumerable的c#反应扩展<iobservable <string>&gt;到IObservable <string> </string> </iobservable <string>

时间:2014-08-07 15:00:42

标签: c# .net system.reactive reactive-programming

我想使用反应式扩展来编写扩展方法

public static IObservable<string> ToString(
  this IEnumerable<IObservable<string>> collection,
  string start,
  string separator,
  string stop)
  {

  }

生成一个字符串流,反映作为参数传递的流集合的最新内容。我还提供了一个起始字符串,一个分隔符和一个停止字符串,用于格式化。

当所有可观察对象至少被触发一次时,我想跟踪字符串表示,因为不同的observables会触发更新。

例如,假设开始是&#34; {&#34;,分隔符是&#34 ;;&#34;,并且停止是&#34;}&#34;,则有3个可观察量在所有首先被解雇的集合中#34; 0&#34;,我想要&#34; {0; 0; 0}&#34;成为由生成的observable生成的初始字符串。

现在假设集合的第一个observable推送&#34; 1&#34;,我希望生成下一个字符串为&#34; {1; 0; 0}&#34;等等。

感谢您的回答。

1 个答案:

答案 0 :(得分:2)

您在此处描述的内容与CombineLatest非常相似。请尝试以下方法:

public static IObservable<string> ToString(this IEnumerable<IObservable<string>> observables, string start, string separator, string stop)
{
    return observables.CombineLatest()
                      .Select(values =>
                      {
                          var sb = new StringBuilder(start);
                          var first = true;

                          foreach (var value in values)
                          {
                              if (first)
                                  first = false;
                              else
                                  sb.Append(separator);

                              sb.Append(value);
                          }

                          sb.Append(stop);
                          return sb.ToString();
                      });
}