以下是一种方法:
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,RiskFactor> { Tuple.Create(m => m.PointsOnLicense > 3,RiskFactor.HIGH_RISK),Tuple.Create(m => m.Age < 25,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 – 但它应该工作…
原文地址:https://www.jb51.cc/csharp/91884.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。