我必须获取一条数据,并对其应用大量可能的变量。我真的不喜欢使用庞大的if语句集的想法,因此我正在寻求一种简化和简化维护方法的帮助。
举个例子:
if (isSoccer)
val = soccerBaseVal;
else if (isFootball)
val = footballBaseVal;
.... // 20 different sports
if (isMale)
val += 1;
else
val += 5;
switch(dayOfWeek)
{
case DayOfWeek.Monday:
val += 12;
...
}
等..等。等..可能在100-200种不同的测试和配方变化范围内。
这似乎是一场维护噩梦。有什么建议么?
编辑:
更严重的是,许多变量仅在某些情况下使用,因此它不仅仅是具有不同值的一组固定逻辑。逻辑本身必须根据条件(可能是从先前变量施加的条件)进行更改(例如,如果val> threshold)。
是的,我同意对许多值使用查找,但是我也必须具有可变的逻辑。
最佳答案
避免使用大型交换结构的常见方法是将信息放入数据结构中。创建一个枚举SportType
和一个包含关联值的Dictionary<SportType, Int32>
。您只需编写val += sportTypeScoreMap[sportType]
就可以了。
这种模式的变化将在许多类似情况下为您提供帮助。
public enum SportType
{
Soccer, Football, ...
}
public sealed class Foo
{
private static readonly IDictionary<SportType, Int32> sportTypeScoreMap =
new Dictionary<SportType, Int32>
{
{ Soccer, 30 },
{ Football, 20 },
...
}
private static readonly IDictionary<DayOfWeek, Int32> dayOfWeekScoreMap =
new Dictionary<DayOfWeek, Int32>
{
{ DayOfWeek.Monday, 12 },
{ DayOfWeek.Tuesday, 20 },
...
}
public Int32 GetScore(SportType sportType, DayOfWeek dayOfWeek)
{
return Foo.sportTypeScoreMap[sportType]
+ Foo.dayOfWeekScoreMap[dayOfWeek];
}
}