小编len*_*kan的帖子

Reactive Extensions:拆分输入,处理和连接

基本上,我有一个可观察的输入字符串,我想单独处理,然后对结果做一些事情.如果输入字符串包含逗号(作为分隔符),我想分割字符串并单独处理每个子字符串,然后对每个字符串序列执行某些操作.下面的代码段说明了我尝试做的简化版本:

[Fact]
public void UniTest1()
{
    var observable = new ReplaySubject<string>();
    observable.OnNext("a,b");
    observable.OnNext("c,d,e");
    observable.OnCompleted();

    var result = new List<string[]>();
    observable
        .SelectMany(x => x.Split(','))
        .Select(x => x.ToUpper())
        .ToArray() // How to collect an IEnumerable for each item here?
        .Do(s => result.Add(s))
        .Subscribe();

    // Here, result is actually {{"A","B","C","D","E"}}, I need {{"A","B"},{"C","D","E"}}
    Assert.Equal(2, result.Count);

    Assert.Equal("A", result[0][0]);
    Assert.Equal("B", result[0][1]);

    Assert.Equal("C", result[1][0]);
    Assert.Equal("D", result[1][1]);
    Assert.Equal("E", result[1][2]);
}
Run Code Online (Sandbox Code Playgroud)

正如评论中所解释的,上述方法不起作用..ToArray() - 调用将整个observable连接成一个序列.

但是,我已经通过将拆分和处理放入单个操作来解决这个问题,如下所示:

[Fact]
public void UniTest2()
{
    var observable = new ReplaySubject<string>();
    observable.OnNext("a,b");
    observable.OnNext("c,d,e");
    observable.OnCompleted(); …
Run Code Online (Sandbox Code Playgroud)

.net c# system.reactive

5
推荐指数
1
解决办法
628
查看次数

标签 统计

.net ×1

c# ×1

system.reactive ×1