gpt4 book ai didi

c# - 编写高度复杂的业务/数学规则的最佳方法

转载 作者:太空狗 更新时间:2023-10-29 21:15:18 24 4
gpt4 key购买 nike

我必须获取一段数据,并对其应用大量可能的变量。我真的不喜欢使用大量 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com