2013-07-29 23 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