拡張メソッドを自分で定義し、拡張メソッドを呼び出してインスタンスからプロパティを返すことにより、ラッパーを手動で削除できます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