C#中延迟执行和延迟评估之间的差异

bab*_*u m 12 c# linq-to-nhibernate

能不能让我知道C#中延迟执行和延迟评估之间的确切差异是什么?这两个是同义词使用的.可以用一个例子解释一下这个区别吗?

Aar*_*ght 24

在实践中,它们的意思基本相同.但是,最好使用延期一词.

  • 懒惰意味着"在你绝对必须做之前不要做这项工作."

  • 延迟意味着"在调用者实际使用它之前不要计算结果".

实际上,当调用者决定使用评估结果(即开始迭代IEnumerable<T>)时,这恰好是需要完成"工作"的点(例如向数据库发出查询).

对于实际发生的事情,延迟一词更具体/更具描述性.当我说我很懒,这意味着我避免做不必要的工作 ; 对于真正意味着什么,这是模棱两可的.但是,当我说执行/评估被推迟时,它实质上意味着我根本没有给你真正的结果,而是你可以用来申请结果.我推迟居然走出去,,直到你认为结果要求它.

在讨论与C#相关的主题时,请使用延迟一词. 懒惰是一个模糊的版本.

注意:延迟执行/评估序列上下文中的延迟加载获取不同. 延迟加载预先加载是用于描述如何加载序列元素的术语.当一个序列被懒惰地加载时,这意味着生成序列的任何东西都足以一次加载一个元素.当急切加载序列时,整个序列一次加载并存储在本地缓冲区中.不同的使用要求需要不同的加载模式.