我有以下代码:
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]
或类似的东西?我觉得我写了一个不必要的开关语句,但我对C#的了解并不足以提出另一种选择。
谢谢,
答案 0 :(得分:2)
鉴于您拥有City1..n
列和属性名称,实际上并没有更好的方法。但是你至少可以将这个switch语句放在TravelCost
实体中。即你可以有一个方法public int TravelCost.GetCostByCity(int city)
,它持有讨厌的switch语句。
答案 1 :(得分:2)
我是c#本人的新手,我不确定每种数据的确切类型。但代码本身看起来很好。我认为TravelCost是一个枚举?如果没有,那么做到这一点是个好主意。您还可以使用Dictionary来存储和操作数据。但对我来说这看起来不错了
答案 2 :(得分:1)
您可以使用hashtable
。
试试这个:
Hashtable distancesFromCityTo = new Hashtable();
distancesFromCityTo.Add("City1", 1000);
distancesFromCityTo.Add("City2", 450);
int cost1 = (int)distancesFromCityTo["City1"];
int cost2 = (int)distancesFromCityTo["City2"];