如何在C#中使用参数化方法并获取其返回的计算结果?
问题:无法从Calcu方法获取计算结果并在外部打印
你的代码存在两个核心问题导致拿不到外部结果:
Calcu是void类型方法,本身不会返回任何值result参数是值传递,方法内部对它的修改不会同步到外部的变量
下面给两种可行的解决办法:
方案一:让方法返回计算结果(推荐)
把Calcu的返回类型改成double?(可空double,用来处理无效运算符的情况),在每个分支里返回对应结果,外部接收后再打印:
// 读取输入的代码不变 Console.WriteLine("Enter first number: "); double num1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Enter second number: "); double num2= Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Enter operator: "); char operation = Convert.ToChar(Console.ReadLine()); // 修改后的Calcu方法 static double? Calcu(char operation, double num1, double num2) { switch (operation) { case '+': return num1 + num2; case '-': return num1 - num2; case '*': return num1 * num2; case '/': // 增加除数不为0的判断,避免运行时异常 if(num2 == 0) { Console.WriteLine("Cannot divide by zero"); return null; } return num1 / num2; default: Console.WriteLine("Invalid Operator"); return null; } } // 调用方法并获取结果 double? result = Calcu(operation, num1, num2); if(result.HasValue) { Console.WriteLine($"Calculation result: {result.Value}"); }
方案二:使用out参数传递结果
如果不想修改方法返回类型,可以用out关键字标记result参数,让方法内部的赋值直接作用于外部变量:
// 读取输入的代码不变 Console.WriteLine("Enter first number: "); double num1 = Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Enter second number: "); double num2= Convert.ToDouble(Console.ReadLine()); Console.WriteLine("Enter operator: "); char operation = Convert.ToChar(Console.ReadLine()); double result; // 修改后的Calcu方法 static bool Calcu(char operation, double num1, double num2, out double result) { result = 0; // 必须先初始化out参数 switch (operation) { case '+': result = num1 + num2; return true; case '-': result = num1 - num2; return true; case '*': result = num1 * num2; return true; case '/': if(num2 == 0) { Console.WriteLine("Cannot divide by zero"); return false; } result = num1 / num2; return true; default: Console.WriteLine("Invalid Operator"); return false; } } // 调用方法并处理结果 if(Calcu(operation, num1, num2, out result)) { Console.WriteLine($"Calculation result: {result}"); }
额外提醒:你原来的代码里没有调用Calcu方法,记得要在读取输入后执行调用逻辑。
内容的提问来源于stack exchange,提问作者aaaaaeel
相关产品推荐
相关产品推荐

