C# 为包含可观察属性的对象列表获取单个可观察对象?

C# 为包含可观察属性的对象列表获取单个可观察对象?,c#,system.reactive,rx.net,C#,System.reactive,Rx.net,所以我有一个对象,它包含一个可观察的属性: public class Tile { ... private BehaviorSubject<TileType> _type; public IObservable<TileType> TypeChanged { get { return _type.AsObservable(); } } ... } 公共类平铺 { ... 私人行为主体_型; 公共IObs

所以我有一个对象,它包含一个可观察的属性:

public class Tile
{
    ...

    private BehaviorSubject<TileType> _type;
    public IObservable<TileType> TypeChanged
    {
        get { return _type.AsObservable(); }
    }

    ...
}
公共类平铺
{
...
私人行为主体_型;
公共IObservable类型已更改
{
获取{return _type.AsObservable();}
}
...
}
我还有一个瓷砖列表:

public List<Tile> Tiles { get; } = new List<Tile>();
public List Tiles{get;}=new List();
现在,我想为tile列表创建一个可观察的对象,因此当任何tile的类型发生变化时(可观察对象应该包括它是哪个tile),会出现一个事件,类似于:

public IObservable<Tile, TileType> TileTypeChanged { get; } = what?
public IObservable TileTypeChanged{get;}=什么?
这可能吗?
如果是,怎么做?

如果
Tiles
是一个静态列表,那么这将起作用:

List<Tile> Tiles = new List<Tile>
{
    //Notifications from these Tiles will be included in TileTypeChanged
};

IObservable<(Tile, TileType)> TileTypeChanged = Tiles
    .Select(t => t.TypeChanged.Select(tt => (t, tt)))
    .Merge();

var willNotBeIncluded = new Tile();     //The notifications from this Tile 
Tiles.Add(willNotBeIncluded);           //will not be included in TileTypeChanged
List Tiles=新列表
{
//来自这些磁贴的通知将包含在TileTypeChanged中
};
IObservable TileTypeChanged=瓷砖
.Select(t=>t.TypeChanged.Select(tt=>(t,tt)))
.Merge();
var willnotbeinclude=new Tile()//来自此互动程序的通知
瓷砖。添加(不包括在内)//将不包括在TileTypeChanged中

如果您希望新添加的项包含在
TileTypeChanged
父可观察项中,那么我建议使用更具反应性的数据结构<代码>反应列表从反应UI开始应该可以工作,或者某种可以观察到的方式来包装列表的更改。

这很好,列表永远不会更改。所以我实际上将其更改为ReadOnlyCollection以反映这一点(这是一个Unity项目,所以还不能使用ImmutableArray:()谢谢!