我们可以用C#中的对象替换if语句吗?
发布时间:2020-12-15 04:22:39 所属栏目:百科 来源:网络整理
导读:以下是一种方法: private RiskFactor calculateMotoristRiskFactor() { if (motorist.PointsOnLicense 3 || motorist.Age 25) return RiskFactor.HighRisk; if (motorist.PointsOnLicense 0) return RiskFactor.ModerateRisk; return RiskFactor.LowRisk; }
以下是一种方法:
private RiskFactor calculateMotoristRiskFactor() { if (motorist.PointsOnLicense > 3 || motorist.Age < 25) return RiskFactor.HighRisk; if (motorist.PointsOnLicense > 0) return RiskFactor.ModerateRisk; return RiskFactor.LowRisk; } 我不想要那些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 – 但它应该工作… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLite 语法(http://www.w3cschool.cc/sqlite/sqlite-synta
- TIOBE 10 月编程语言排行榜:Swift 正过时?
- ruby-on-rails – 带有Rails 2.3.x的RSpec-2
- 使用sbt打包依赖库文件
- c 11 – 移动构造函数是否隐式地为成员变量工作?
- ruby-on-rails – 考虑Rails中的订单来建模股票
- vue.js vue-router如何实现无效路由(404)的友好提示
- c – prctl(PR_SET_PDEATHSIG,SIGNAL)在父线程退出时调用,而
- c# – 如何使用XAML在DataContext中设置类?
- 向依赖关系宣战——依赖倒置、控制反转和依赖注入辨析