gpt4 book ai didi

c# - 我们可以用 C# 中的对象替换 if 语句吗

转载 作者:太空狗 更新时间:2023-10-29 21:19:23 27 4
gpt4 key购买 nike

下面是一个方法:

  private RiskFactor calculateMotoristRiskFactor()
{

if (motorist.PointsOnLicense > 3
|| motorist.Age < 25)

return RiskFactor.HighRisk;
if (motorist.PointsOnLicense > 0)
return RiskFactor.ModerateRisk;

return RiskFactor.LowRisk;
}

我不想要那些 if 语句。

我可以使用策略模式来解决这个问题吗?如果是,那么我也不希望不同多态类中的每个方法都应该有一个 If 语句

RiskFactor 是一个枚举

有什么更好的方法可以使它更加面向对象而不是过程化?

最佳答案

嗯,你可以有一个 List<Tuple<Func<Motorist, bool>, RiskFactor> :

var filters = new List<Tuple<Func<Motorist, bool>, RiskFactor>
{
Tuple.Create(m => m.PointsOnLicense > 3, RiskFactor.HIGH_RISK),
Tuple.Create(m => m.Age < 25, RiskFactor.HIGH_RISK),
Tuple.Create(m => m.PointsOnLicense > 0, RiskFactor.MODERATE_RISK),
};

然后:

var risk = filters.Where(filter => filter.Item1(motorist))
.Select(filter => filter.Item2)
.DefaultIfEmpty(RiskFactor.LOW_RISK)
.First();

这至少使得添加额外的检查变得容易,并且它只是按顺序运行它们。这有点繁琐 - 我可能会创建一个自定义 Filter输入而不是 Tuple例如 - 但它应该工作...

关于c# - 我们可以用 C# 中的对象替换 if 语句吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6864766/

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