为什么lambda函数不会引入与goto语句类似的问题?

A. *_*eur 1 c# lambda goto anonymous-function

在我的c#书中,它写着:"=> lambda运算符(读作'转到')."

我一直想知道goto和lambda表达在良好的编码实践方面有什么区别.如果由于可能存在复杂的代码而避免使用goto,那么lambda表达式是否也会导致同样的问题呢?更一般地说,为什么我非常鼓励使用lambda函数,而我非常不鼓励使用goto?(即我已经掌握了为什么goto不受欢迎,但为什么lambda函数不是因为类似的原因而不受欢迎?)

我唯一的猜测是lambda函数评估并返回一些东西,因为我们不知道goto可能会做什么.这至少应该使lambda函数更容易测试,因为它们更符合有组织的,面向对象的代码的思想.

Str*_*ior 5

仅仅因为你"读" =>到"去"并不意味着它与老派的GOTO陈述有任何关系.它们是完全不同的东西.我听说开发人员在大声朗读符号时会使用"收益"这样的短语,或者只使用"箭头".

GOTO语句为开发人员提供了过多的自由,可以将执行点移动到代码中的任意点.它往往会引入错误,因为开发人员很难跟踪各个变量在任何给定时间点可能存在的所有可能状态,当执行能够任意跳转时.

所有函数(包括lambda函数)都定义了范围和执行流程,该执行流程遵循由C#语言的其余部分建立的逻辑.请记住,lambda语法只是"语法糖",它映射到delegate/闭包,这基本上只是一个美化的函数.