您可以自己剛剛定義的擴展方法,通過調用Select
extension method從Timestamped
實例返回Value
property手動刪除Timestamped
wrapper:
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
implementation和過載調用Timestamp
extension method overload:
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
extension method並沒有提供多少價值。
完美時,我就認爲這將是類似的東西,我想「選擇」的ITimeStampedObservable(或什麼都它叫),但沒有實際的單詞「選擇」的內容。 :) – Ian