加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我们可以用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语句.

我可以使用策略模式来解决这个问题吗?
如果是,那么我也不希望不同的多态类中的每个方法都应该有一个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 – 但它应该工作…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读