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

C# 为什么简写lambda表达式只在某些情况下有效?,c#,linq,lambda,C#,Linq,Lambda,例如,这两条语句都检查字符串的每个字符,看它是否是数字 “abc3def".Any(c => char.IsDigit(c)); "abc3def".Any(char.IsDigit); 第二个语句是如何工作的,我还可以在哪里使用这样的速记表达式。这似乎并不是在所有情况下都有效。 我没有遇到任何其他示例?在c#中,如果方法组(例如,char.IsDigit)的签名匹配,编译器可以隐式地将其转换为委托。这被称为“方法组转换”(你可以用谷歌搜索) 在本例中为字符串。任何都有一个重载,该重

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

 “abc3def".Any(c => char.IsDigit(c));
 "abc3def".Any(char.IsDigit);
第二个语句是如何工作的,我还可以在哪里使用这样的速记表达式。这似乎并不是在所有情况下都有效。 我没有遇到任何其他示例?

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


在本例中为
字符串。任何
都有一个重载,该重载接受
Func
(一个接受
char
并返回
bool
)的
char.IsDigit
与该签名匹配(它接受
char
并返回
bool
)。因此,编译器能够隐式地将
char.IsDigit
转换为
Func

什么示例不起作用?我不知道C#,但第二个看起来不像“速记lambda”,它看起来只是引用了这个方法。