我必须获取一段数据,并对其应用大量可能的变量。我真的不喜欢使用大量 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];
}
}
关于c# - 编写高度复杂的业务/数学规则的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3143607/