将具有集合的对象序列转换为平坦序列

时间:2016-05-26 14:47:45

标签: c# system.reactive reactive-programming

我有一系列A类事件。 A包含数据对象B的枚举。 我想将序列A映射到C,这样它就是B的平坦序列。 我怎么能这样做?

public class Sandbox
{
    public class A
    {
        public IEnumerable<B> Collection { get; set; }
    }

    public class B
    {

    }

    private readonly IObservable<A> _sequence;

    public Sandbox(IObservable<A> sequence)
    {
        _sequence = sequence;
    }

    public IObservable<B> C
    {
        get { return _sequence.Select(o =>  /* ... */); }
    } 
}

3 个答案:

答案 0 :(得分:2)

您正在寻找Observable.SelectMany的{​​{3}}。这需要一个返回IEnumerable<T>的投影函数。

  

将可观察序列的每个元素投影到可观察序列,并将得到的可观察序列展平为一个可观察序列。

public IObservable<B> C
{
    get { return _sequence.SelectMany(o => o.Collection); }
} 

答案 1 :(得分:0)

尝试使用Enumerable.SelectMany,它需要一系列序列并展平它们。

答案 2 :(得分:0)

你确实想要SelectMany而不是Enumerable SelectMany Observable.SelectMany

public IObservable<B> C
{
    get { return _sequence.SelectMany(o =>  o.Collection); }
}