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

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

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

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

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

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

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

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

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

在过程中延迟/懒惰评估是相同的。

LINQ查询使用延迟(或延迟)评估,在使用结果之前不实际获取任何数据。

在c#中,延迟/延迟评估执行相同的过程,在请求之前不执行查询。

例如:

 DataContext context = new DataContext(); var query = from customer in context.Customers where customer.City == "Delhi" select customer; // Query does not execute here, it wont fetch to database to retrieve data foreach (var Customer in query) // Query executes here { Console.WriteLine(Customer.Name); } 

它仅在使用投影/聚合函数等立即执行时执行。 例如:

  DataContext context = new DataContext(); var query = (from customer in context.Customers where customer.City == "Delhi" select customer).Count(); // Query execute here 

.Count()立即触发并执行查询。