代码之家  ›  专栏  ›  技术社区  ›  userSteve

为什么速记lambda表达式只在某些情况下有效?

  •  2
  • userSteve  · 技术社区  · 7 年前

    这两个语句都检查字符串的每个字符,看它是不是数字

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

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

    1 回复  |  直到 7 年前
        1
  •  6
  •   Eren Ersönmez    7 年前

    在c_中,编译器可以隐式地转换方法组(例如 char.IsDigit )如果签名匹配,则发送给委托人。这叫做“方法组转换”(你可以用谷歌搜索)。

    在这种情况下 string.Any 具有接受 Func<char, bool> (接受 char 并返回 bool )哪个 字符IsDigit 匹配该签名(需要 烧焦 并返回 布尔 )中。因此,编译器能够隐式地转换 字符IsDigit 函数<char,bool> 是的。