我正在学习匿名方法、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/