c# - 为什么这个匿名方法不起作用而 lambda 起作用?

标签 c# lambda anonymous-function

我正在学习匿名方法、lambda 等,但找不到它在这里不起作用的原因:

// this does not work
MyDictionary.Keys.Where(delegate(string s) { s.Length == 5; });

// this works
MyDictionary.Keys.Where(w => w.Length == 5);

最佳答案

您忘记返回语句的结果:

MyDictionary.Keys.Where(delegate(string s) { return s.Length == 5; });

delegate 视为一个完整的方法,除了命名部分外,它必须尽可能与独立方法相同。所以,你可以把它想象成:

delegate(string s) {
    // you would need to return something here:
    return s.Length == 5; 
}

更新:

另外,想想这 2 个 lambda:

MyDictionary.Keys.Where(w => w.Length == 5); // works
MyDictionary.Keys.Where(w => { w.Length == 5 }); // does not work

为什么第二个不起作用?以这种方式思考,可以更好地了解正在发生的事情。这只是为了简化图片:

第一个 lambda 是一个语句:w.Length == 5 并且一个语句有一个实际返回它的结果。不是吗?

但是第二个:{ w.Length == 5 } 是一个 block 。一个 block 不会返回任何东西,除非你明确地这样做。

关于c# - 为什么这个匿名方法不起作用而 lambda 起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30951504/

相关文章:

c# - 如果将回调分配给对象两次,事件是否会执行两次?

python - 对 lambda 表达式的包装

c# - 将参数传递给 AWS Lambda 函数

python - 为什么 lambda 要求 2 个参数,尽管给出了 2 个参数?

斯卡拉。解释{a : Int => Int}

c# - 如何在 json.net 中返回 json 对象而不是字符串?

c# - 在 ASP.NET Core 2 中强制使用已知 header 的特定大小写

haskell - 匿名函数中的参数

c# - 调试ActiveProcess崩溃

javascript - 有没有办法指定我想在 JS 匿名函数中使用哪个 'this' ,类似于 Java 的做法?