为什么这个匿名方法不起作用而 lambda 起作用?
Why this anonymous method does not work while the lambda does?
我正在学习匿名方法、lambdas 等,但找不到它在这里不起作用的原因:
// this does not work
MyDictionary.Keys.Where(delegate(string s) { s.Length == 5; });
// this works
MyDictionary.Keys.Where(w => w.Length == 5);
您忘记了return
语句的结果:
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
并且一个语句的结果实际上是 return。不是吗?
但是第二个:{ w.Length == 5 }
是一个块。一个块不会 return 任何东西,除非你明确地这样做。
你必须在委托的正文中放置一个 return
语句,如下所示:
MyDictionary.Keys.Where(delegate(string s) { return s.Length == 5; });
你可以认为 return
是 lambda 版本中箭头所暗示的,这就是它起作用的原因。
我正在学习匿名方法、lambdas 等,但找不到它在这里不起作用的原因:
// this does not work
MyDictionary.Keys.Where(delegate(string s) { s.Length == 5; });
// this works
MyDictionary.Keys.Where(w => w.Length == 5);
您忘记了return
语句的结果:
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
并且一个语句的结果实际上是 return。不是吗?
但是第二个:{ w.Length == 5 }
是一个块。一个块不会 return 任何东西,除非你明确地这样做。
你必须在委托的正文中放置一个 return
语句,如下所示:
MyDictionary.Keys.Where(delegate(string s) { return s.Length == 5; });
你可以认为 return
是 lambda 版本中箭头所暗示的,这就是它起作用的原因。