【发布时间】:2014-01-07 08:01:56
【问题描述】:
我有一些代码应该根据给定的顺序为其属性分配一些值。
下面是一些可以完成这项工作的示例代码:
public class AnimalCount
{
public int Dogs;
public int Cats;
public int Fish;
public int Birds;
public void RankValues(string first, string second, string third, string fourth)
{
string property = "";
int value = -1;
for (int i = 0; i < 4; i++)
{
switch (i)
{
case 0: property = first; value = 10; break;
case 1: property = second; value = 12; break;
case 2: property = third; value = 19; break;
case 3: property = fourth; value = 20; break;
}
switch (property)
{
case "dogs": Dogs = value; break;
case "cats": Cats = value; break;
case "fish": Fish = value; break;
case "birds": Birds = value; break;
}
}
}
}
不过,这段代码存在一些问题。
- 主要的问题是如何传递参数。使用这种方法,由于它们是作为字符串传递的,因此我们失去了类型安全性。因此,我们可能有重复或不匹配的字符串。我们可以使用枚举,但仍然存在重复的风险,我们必须进行一些代码重复才能使其正常工作。
- 开关很丑。感觉就像是代码重复。
除了用异常处理填充代码之外,还有什么更好的解决方案吗?对我来说似乎非常丑陋。
如果您一定要知道,我正在尝试编写一个函数,该函数采用龙与地下城中要求的能力分数顺序,并按照您选择的顺序为它们滚动。
【问题讨论】:
-
您使用的是特定语言吗?在我看来是 c#/java 吗?
-
是的,它是 C#,但这个问题确实适用于任何程序语言
-
c# 是面向对象的而不是过程的。
-
是的,当我说“程序”时,我的意思是它是“命令式”的同义词,而不是“严格程序”的意思。所有 OO 语言(我所知道的)也是命令式语言。
-
如果您发布已编译的代码会很好。 :-)
标签: c# code-readability