You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#实现Func<int,bool>取反返回相反布尔值的高阶函数方法

错误原因

你当前写的y => !y逻辑不符合委托高阶函数的要求:

  • 参数y是Func<int,bool>类型的委托实例,本身不是布尔值,直接对委托对象用!取反本身就不符合类型逻辑
  • 你没有构造符合返回值要求的Func<int,bool>委托:not作为高阶函数,需要返回一个接收int入参的新委托,在新委托内部调用原始传入的委托y,拿到布尔返回值后再做取反。
修正代码

只需要在lambda中嵌套一层内层lambda,构造符合签名的返回委托即可:

Func<Func<int,bool>, Func<int, bool>> not = y => x => !y(x);

Func<int, bool> equalTo0 = x => x == 0;

var test3 = not(equalTo0)(5); // 运行结果为true,符合预期

你给出的预期示例也能正常运行:

// 测试奇偶判断场景
var isEven = x => x % 2 == 0;
Console.WriteLine(not(isEven)(1)); // 输出True
Console.WriteLine(not(isEven)(2)); // 输出False
执行逻辑说明
  • 调用not(传入委托)时,会返回一个新的Func<int,bool>委托,这个委托记住了原始传入的委托y
  • 当你给返回的新委托传入int参数(比如示例里的5、1、2)时,实际执行的逻辑是:把int参数传给原始委托y拿到布尔结果,再对这个结果取反返回。比如not(equalTo0)(5)实际等价于!(5 == 0),计算结果为true。

内容的提问来源于stack exchange,提问作者yourickmovies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:06:23