例如,这两个语句都检查字符串的每个字符以查看其是否为数字
“abc3def".Any(c => char.IsDigit(c));
"abc3def".Any(char.IsDigit);
第二条语句如何工作,以及在哪里可以使用这样的速记表达式。似乎并非在所有情况下都有效。 我还没有遇到其他例子吗?
答案 0 :(得分:6)
在c#中,如果编译器的签名匹配,则可以将方法组(例如char.IsDigit
)隐式转换为委托。这称为“方法组转换”(可以在Google上搜索)。
在这种情况下,string.Any
具有一个接受Func<char, bool>
匹配的char
(接受bool
并返回char.IsDigit
的委托)的重载。该签名(它需要一个char
并返回一个bool
)。因此,编译器能够将char.IsDigit
隐式转换为Func<char, bool>
。