如何在C#中实现符合要求的eight、minus、plus等计算函数?
实现链式数字计算逻辑的解决方案
问题分析
现有代码的参数设计不符合目标调用逻辑:调用minus(three())时,操作函数需要先接收右侧数值,返回一个能接收左侧数值的计算委托;而数字函数需要支持两种调用方式——无参时返回自身数值,有参时将自身数值传入操作委托完成计算。
完整实现步骤
1. 修正操作函数(Plus/Minus)
调整函数签名,让它们接收右侧数值,返回一个接收左侧数值并输出计算结果的委托:
private static Func<int, int> Minus(int right) => left => left - right; private static Func<int, int> Plus(int right) => left => left + right;
2. 实现数字函数(以three、eight为例)
为每个数字实现重载函数,覆盖无参返回自身、有参执行计算两种场景:
// 数字3的实现 private static int Three() => 3; private static int Three(Func<int, int> operation) => operation(3); // 数字8的实现 private static int Eight() => 8; private static int Eight(Func<int, int> operation) => operation(8);
3. 验证调用逻辑
此时调用目标代码即可得到预期结果:
// 返回5 var result1 = Eight(Minus(Three())); // 返回11 var result2 = Eight(Plus(Three()));
扩展说明
如果需要支持更多数字(如one、two等),只需按照相同的重载模式实现对应函数;若要新增乘、除等操作,同理实现接收右侧数值并返回计算委托的函数即可。
内容的提问来源于stack exchange,提问作者Penance
相关产品推荐
相关产品推荐

