C# 如何简化输入变量值的开关语句?

C# 如何简化输入变量值的开关语句?,c#,C#,有没有办法简化这个Switch语句? 我应该使用循环还是应该这样 公共静态无效计算(浮动投资、浮动年数、浮动利息) { 浮动酯; 利息率=利息/100*投资额;//%投资额*1。 开关(年) { 案例1:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*1);break; 案例2:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*2);break; 案例3:Console.WriteLin

有没有办法简化这个Switch语句? 我应该使用循环还是应该这样

公共静态无效计算(浮动投资、浮动年数、浮动利息)
{
浮动酯;
利息率=利息/100*投资额;//%投资额*1。
开关(年)
{
案例1:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*1);break;
案例2:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*2);break;
案例3:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*3);break;
案例4:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*4);break;
案例5:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*5);break;
案例6:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*6);break;
案例7:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*7);break;
案例8:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*8);break;
案例9:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*9);break;
案例10:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*10);break;
案例11:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*11);break;
案例12:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*12);break;
案例13:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*13);break;
案例14:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*14);break;
案例15:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*15);break;
案例16:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*16);break;
案例17:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*17);break;
案例18:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*18);break;
案例19:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*19);break;
案例20:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*20);break;
案例21:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*21);break;
案例22:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*22);break;
案例23:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*23);break;
案例24:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*24);break;
案例25:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*25);break;
案例26:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*26);break;
案例27:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*27);break;
案例28:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*28);break;
案例29:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*29);break;
案例30:Console.WriteLine(“您的返回=R{0}”,invested+interestRate*30);break;
}
}

这样就可以了

interestRate = interest / 100 * invested; // % of invested * 1.
Console.WriteLine("Your return = R {0}", invested + interestRate * years);

通常情况下,利息在一年结束时加入投资资金。因此,简单地乘以年数可能不会产生预期的结果。所以,如果你有一个百分比的比率,你可以计算

accruedAmount = invested * (1 + ratePercent/100)^years
假设:

decimal invested, ratePercent;
int years;
计算:

decimal accruedAmount = invested * (decimal)Math.Pow(1 + (double)ratePercent/100), years);

顺便说一句,以百分比表示的利率为
100*利息/投资
。你弄错了,因为你除以100,再乘以
。也许你把术语弄混了。应该是

// Interest for one year (with interestRate in %):
interest = interestRate / 100 * invested;

您可以重构
开关
块,如下所示:

if (years >= 1 && years =< 30)
  Console.WriteLine("Your return = R {0}", invested + interestRate * years);
如果(年数>=1和年数=<30)
WriteLine(“您的回报率=R{0}”,投资+利率*年);
如果可以的话,您应该使用
double
而不是
float
,以获得更高的精度和更少的问题,并且在x64系统上
double
通常是优化的,因为它有8个字节,所以float对于新的开发来说越来越过时


但是,
decimal
对于@Fildor所示的货币操作可能是更好的选择。

没有
开关
Console.WriteLine(“您的回报率=R{0}”,投资+利率*年)
在@HimBromBeere的答案之上,如果您只需要1-30,则使用if检查值无关:不要将浮点类型用于货币金额。顺便说一句:
years
是一个
float
,您的开关可能在所有情况下都不起作用。
years
不应该是
int
?我还建议-由于该方法的名称是
Calculate
-它应该返回计算值,调用方应该决定如何处理它(例如,将其写入控制台)。这样,您就可以对函数进行单元测试,以确保它产生您期望的结果。
if (years >= 1 && years =< 30)
  Console.WriteLine("Your return = R {0}", invested + interestRate * years);