例如,这两个语句都检查字符串的每个字符以查看它是否为数字
“abc3def".Any(c => char.IsDigit(c));
"abc3def".Any(char.IsDigit);
Run Code Online (Sandbox Code Playgroud)
第二个语句如何工作,我还能在哪里使用这样的速记表达式.它似乎并不适用于所有情况.我没有遇到任何其他例子?
在c#中,如果方法组char.IsDigit匹配,则编译器可以隐式地将方法组(例如)转换为委托.这称为"方法组转换"(您可以谷歌).
在这种情况下string.Any有一个重载接受一个Func<char, bool>(一个接受char并返回一个的委托bool)char.IsDigit匹配该签名(它需要一个char并返回一个bool).因此,编译器能够隐式转换char.IsDigit为Func<char, bool>.