2012-12-17 60 views
2

因此,過時的動手實驗室(HoL)使用RemoveTimestamp方法,該方法在以後的版本中被刪除。我不完全確定它的行爲應該是什麼。從HoL提供此擴展方法:RemoveTimestamp Rx(已刪除但未被遺忘)

public static IObservable<T> LogTimestampedValues<T>(this IObservable<T> source, 
    Action<Timestamped<T>> onNext) 
{ 
    return source.Timestamp().Do(onNext).RemoveTimestamp(); 
} 

是否有任何替換或者是否有人知道此方法的新操作/預期行爲? Timestamp仍然存在。

回答

2

您可以自己剛剛定義的擴展方法,通過調用Select extension methodTimestamped實例返回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並沒有提供多少價值。

+0

完美時,我就認爲這將是類似的東西,我想「選擇」的ITimeStampedObservable(或什麼都它叫),但沒有實際的單詞「選擇」的內容。 :) – Ian

2

田田!

public static IObservable<T> RemoveTimestamp<T>(this IObservable<Timestamped<T>> This) 
{ 
    return This.Select(x => x.Value); 
}