在代码中更改变量名称,这样我就不必重复大块

时间:2015-09-21 18:09:48

标签: c# unity3d

    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次。我怎么能这样做?感谢

3 个答案:

答案 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处的数据,但明显的缺点是你需要分配比你需要的更多的内存。这可能是值得的权衡。

作为旁注,您不应该使用floatdouble来存储货币值,因为它们不准确。 C#具有decimal类型以获得更高的精度。