为什么简写lambda表达式仅在某些情况下有效?

时间:2018-07-14 18:53:27

标签: c# linq lambda

例如,这两个语句都检查字符串的每个字符以查看其是否为数字

 “abc3def".Any(c => char.IsDigit(c));
 "abc3def".Any(char.IsDigit);

第二条语句如何工作,以及在哪里可以使用这样的速记表达式。似乎并非在所有情况下都有效。  我还没有遇到其他例子吗?

1 个答案:

答案 0 :(得分:6)

在c#中,如果编译器的签名匹配,则可以将方法组(例如char.IsDigit)隐式转换为委托。这称为“方法组转换”(可以在Google上搜索)。

在这种情况下,string.Any具有一个接受Func<char, bool>匹配的char(接受bool并返回char.IsDigit的委托)的重载。该签名(它需要一个char并返回一个bool)。因此,编译器能够将char.IsDigit隐式转换为Func<char, bool>