在 Observable 集合的 Scan 方法中跳过空值

问题描述 投票:0回答:0

我有一个带有时间戳的 Observable 项目集合。 我使用 Scan 方法包装每个项目,并添加对集合中最后一个有效项目的引用。

IObservable<IWrappedItem> wrappedItems = allItems.Scan(seedItem, (lastWrappedItem, currentItem) => WrapItem(currentItem, lastWrappedItem)));

WrapItem 有这个签名: IWrappedItem WrapItem(Item currentItem, IWrappedItem lastItem);

我们需要更改 WrapItem 方法,因此它会跳过无效项目并返回 null。 seedItem 很可能为 null,而 WrapItem 方法可以处理它。 我需要用这样的方式更新我使用 Scan 的方式:

IObservable<IWrappedItem> wrappedItems = allItems.Scan(seedItem, (lastWrappedItem, currentItem) => 
{
  IWrappedItem wrappedItem = WrapItem(currentItem, lastWrappedItem);
  if (wrappedItem == null)
  {
    // Do something clever to skip this invalid item
    // Next item should have a reference to lastWrappedItem
  }
  return wrappedItem;
}));

如何在不向新集合返回空值的情况下实现此行为,同时保持 Observable 模式? 我应该使用其他方法代替“扫描”吗?

c# .net reactive-programming system.reactive rx.net
© www.soinside.com 2019 - 2024. All rights reserved.