您可以自己定义扩展方法,通过调用扩展方法手动删除Timestamped
包装器并从实例返回属性:Select
Value
Timestamped
public static IObservable<T> LogTimestampedValues<T>(this IObservable<T> source,
Action<Timestamped<T>> onNext)
{
// Validate parameters.
if (source == null) throw new ArgumentNullException("source");
if (onNext == null) throw new ArgumentNullException("onNext");
// Timestamp, call action, then unwrap.
return source.Timestamp().Do(onNext).Select(t => t.Value);
}
然而,为了真正有效,你真的想定义一个重载,它接受一个IScheduler
实现并调用Timestamp
扩展方法重载:
public static IObservable<T> LogTimestampedValues<T>(this IObservable<T> source,
Action<Timestamped<T>> onNext, IScheduler scheduler)
{
// Validate parameters.
if (source == null) throw new ArgumentNullException("source");
if (onNext == null) throw new ArgumentNullException("onNext");
if (scheduler == null) throw new ArgumentNullException("scheduler");
// Timestamp, call action, then unwrap.
return source.Timestamp(scheduler).Do(onNext).Select(t => t.Value);
}
您想要这样做,因为您可能有一个特定的调度程序希望日志记录使用。
如果您没有传入IScheduler
实现,那么初始扩展方法只不过是扩展方法的一个薄包装器Do
,并没有提供太多价值。