C#中的方法参数可以像这样吗?

4
我有一项来自老师的作业,我认为这个任务不可能完成,但他坚持说可以:基本上我需要创建一个方法 WriteSum,该方法会将两个整数相加,而在主方法中他会调用该方法,而我必须在类中编写 WriteSum 方法代码:他坚持认为方法必须像这样调用:WriteSum(22+24),返回值为 46。这可行吗?据我所知,在 C# 中,方法参数之间要用逗号分隔,因此他正确调用方法的代码应该是 WriteSum(22,24)。
他的代码如下:
string n = Calculator.WriteSum(22+24);
Console.WriteLine(n);
Console.Read();

我需要在计算器类中编写“WriteSum”方法。


3
“WriteSum(22+24)”与“WriteSum(46)”具有相同的效果,因为编译器可能会将这些常量相加。也许老师希望它作为一个字符串,“WriteSum("22+24")”,你需要解析它吗?你向老师询问过澄清吗? - lurker
正如lurker所说,只需接受一个以加号分隔的字符串并返回。 - Scath
请编辑并发布相关代码,包括您需要实现的方法的声明。 - Sergey Kalinichenko
1
作为澄清,调用 WriteSum(22+24) 时,求和是在调用之前完成的,而您的方法不执行任何求和操作。更重要的是,该方法甚至不知道是否进行了加法运算,它只接收数字 46。您也可以调用方法 WriteSum(3*9-4),正如您所看到的,这里没有涉及到求和,因为它接收到了一个 int 类型的参数,所以同样可以正常工作。 - Andrew
如果WriteSum接受一个Expression<Func<int>>作为参数,那么可能是可以的(() => 22+24),但我不认为老师有这个意图。 - Caramiriel
1个回答

5
您是正确的:C#会在调用您的方法之前评估表达式22+24,也就是说,WriteSum(22+24)的行为将与WriteSum(46)完全相同,即:
  1. 调用一个名为WriteSum的单参数方法,并且
  2. 将整数表达式46作为参数传递。
因此,“如题所述”的要求无法实现。正如其他人在评论中提到的那样,你的教师可能“实际上是想要”分配给你以下任务之一:
  1. 仅写入已传递参数的值。在这种情况下,方法应该被称为WriteInt而不是WriteSum,并且实现将是微不足道的。
  2. 如果该方法采用字符串参数(即WriteSum("22 + 24")),则需要解析字符串,提取被加数,执行加法运算并打印(或返回)结果。对于一个学生来说,这很像一个现实任务。
无论如何,在实施任何内容之前,您都应该明确要求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接