我想使用反应式扩展来编写扩展方法
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;等等。
感谢您的回答。
答案 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();
});
}