2013-07-29 26 views
3

當我檢查懶惰<T>類的實現,我看到這個塊:爲什麼懶惰<T>在序列化期間強制初始化?

[OnSerializing] 
private void OnSerializing(StreamingContext context) 
{ 
    T obj = this.Value; 
} 

正如你可以看到它的序列化過程中強制初始化。有誰知道爲什麼這種行爲是首選的默認值?

回答

3

如果它沒有,並且您提供了用於初始化的lambda,那麼您認爲它在反序列化中恢​​復了哪些值? lambda不是可序列化的。

+0

我同意你的意見,但你對lambda沒有被序列化是錯誤的。一些lambda表達式可以被序列化,但這不是一件好事。 – Lukazoid

1

Lazy<T>的整點是延遲評估直到需要爲止。這可以通過在實際需要之前不計算東西來節省處理能力。當你序列化一些東西時,你通常想要序列化它的值,所以Lazy<T>必須計算出的值是,這樣就可以對它進行序列化。

+0

它不回答他的問題,因爲在序列化時你不需要它的值。這是因爲你不能序列化lambda並延遲評估。 – TakeMeAsAGuest

+0

這取決於T是什麼,但是,這就是*爲什麼*你需要價值。你不能依賴於能夠序列化評估函數,所以你將其結果序列化。 – anaximander