4

我有以下代码:

var currentCity = db.City.Find(player.Location);

switch (TravelTo) {
    case 1:
        costs = currentCity.TravelCost.City1;
        break;
    case 2:
        costs = currentCity.TravelCost.City2;
        break;
    case 3:
        costs = currentCity.TravelCost.City3;
        break;
    case 4:
        costs = currentCity.TravelCost.City4;
        break;
    case 5:
        costs = currentCity.TravelCost.City5;
        break;
}

有没有更好的方法来获得成本价值?有没有办法可以更改我要调用的字符串的名称?所以我可以创造类似的东西

costs = currentCity.TravelCost.City[TravelTo]

或类似的东西?我觉得我写了一个不必要的 switch 语句,但我对 C# 的了解还不足以想出一个替代方案。

谢谢,

4

3 回答 3

2

我自己是 c# 的新手,我不确定这些数据类型到底是什么。但是代码本身看起来不错。我认为 TravelCost 是一个枚举?如果没有,这样做是个好主意。您还可以使用字典来存储和操作数据。但对我来说,这看起来已经足够好了

于 2013-05-16T11:23:45.220 回答
2

City1..n鉴于您拥有这些列和属性名称,没有更好的方法。但是您至少可以将此 switch 语句放在TravelCost实体中。即你可以有一个public int TravelCost.GetCostByCity(int city)持有讨厌的 switch 语句的方法。

于 2013-05-16T11:23:03.550 回答
1

您可以使用hashtable.

尝试这个:

Hashtable distancesFromCityTo = new Hashtable();    
distancesFromCityTo.Add("City1", 1000);
distancesFromCityTo.Add("City2", 450);

int cost1 = (int)distancesFromCityTo["City1"];
int cost2 = (int)distancesFromCityTo["City2"];
于 2013-05-16T11:19:06.143 回答