switch (name)
{
case "One":
if (UpgradeOne_CostNextUpgrade <= TotalCash){//Decides if you have enough money to purchase upgrade 1
TotalCash -= Float_CostOfNextUpgradeOne; //Subtracts the cost of upgrade 1 from TotalCash
Int_UpgradeOneOwned += 1;//Increases count of upgrade 1 by 1
}//end if
break; ...
所以我有兴趣运行类似的代码,如上所示,进行10次不同的升级。我为每个案例做了一个案例陈述,但发现代码每次都要重复。我想在代码中以某种方式更改变量名称,因此我可以使用相同的块10次。我怎么能这样做?感谢
答案 0 :(得分:1)
如果您针对多个案例使用相同的代码,则可以将空案例转换为非空案例:
switch (name)
{
case "One" :
case "Two" :
case "Three" :
Console.WriteLine("One, two or three");
break;
}
我不确定更改变量名称的含义。我怀疑name
是指变量的实际名称。你在用反射吗?
答案 1 :(得分:0)
这看起来像是一个家庭作业问题而你没有发布你的代码,所以我只发布概念,而不是代码。
声明两个数组,UpgradePrice []和UpgradeOwned []。在第一个中初始化价格,并将第二个设置为全部为FALSE。
现在你可以使用循环迭代了。首先测试是否尚未购买升级。然后根据升级价格测试可用现金。
您还可以对此进行扩展以提供一系列升级。使UpgradeOwned成为整数而不是布尔值。定义二维数组UpgradePrice [10,5]然后你可以测试if(CashAvailable&gt; UpgradePrice [i,UpgradesOwned [i]])。当UpgradesOwned [i]变得太大时,请确保您停止测试升级,否则您将违反边界。
答案 2 :(得分:0)
你如何使用数组?
float[] upgradeCosts = new float[] { cost1, cost2, cost3 ... };
int[] upgradesOwned = new int[10];
int choice = -1;
switch (name)
{
// this might be confusing, but arrays in C# are zero-based
case "One": choice = 0; break;
case "Two": choice = 1; break;
case "Three": choice = 2; break;
...
}
if (choice > -1 && upgradeCosts[choice] <= TotalCash){//Decides if you have enough money to purchase upgrade 1
TotalCash -= upgradeCosts[choice]; //Subtracts the cost of upgrade 1 from TotalCash
upgradesOwned[choice] += 1;//Increases count of upgrade 1 by 1
} //end if
如果你想帮助提高可读性,你可以存储一个包含11个元素的数组,而不是使用0处的数据,但明显的缺点是你需要分配比你需要的更多的内存。这可能是值得的权衡。
作为旁注,您不应该使用float
或double
来存储货币值,因为它们不准确。 C#具有decimal
类型以获得更高的精度。