我有一个带有时间戳的 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 模式? 我应该使用其他方法代替“扫描”吗?