当我检查懒惰<T>
类的实现,我看到这个块:为什么懒惰<T>在序列化期间强制初始化?
[OnSerializing]
private void OnSerializing(StreamingContext context)
{
T obj = this.Value;
}
正如你可以看到它的序列化过程中强制初始化。有谁知道为什么这种行为是首选的默认值?
当我检查懒惰<T>
类的实现,我看到这个块:为什么懒惰<T>在序列化期间强制初始化?
[OnSerializing]
private void OnSerializing(StreamingContext context)
{
T obj = this.Value;
}
正如你可以看到它的序列化过程中强制初始化。有谁知道为什么这种行为是首选的默认值?
如果它没有,并且您提供了用于初始化的lambda,那么您认为它在反序列化中恢复了哪些值? lambda不是可序列化的。
Lazy<T>
的整点是延迟评估直到需要为止。这可以通过在实际需要之前不计算东西来节省处理能力。当你序列化一些东西时,你通常想要序列化它的值,所以Lazy<T>
必须计算出的值是,这样就可以对它进行序列化。
它不回答他的问题,因为在序列化时你不需要它的值。这是因为你不能序列化lambda并延迟评估。 – TakeMeAsAGuest
这取决于T是什么,但是,这就是*为什么*你需要价值。你不能依赖于能够序列化评估函数,所以你将其结果序列化。 – anaximander
我同意你的意见,但你对lambda没有被序列化是错误的。一些lambda表达式可以被序列化,但这不是一件好事。 – Lukazoid