/// <summary> /// 利用表驱动法,读取费率 /// </summary> /// <param name="gender"></param> /// <param name="marital"></param> /// <param name="smoke"></param> /// <param name="age"></param> /// <returns></returns> public double GetRateByTable(GenderEnum gender, MaritalEnum marital, SmokeEnum smoke, int age) { byte type = (byte)(((byte)gender << 6) | ((byte)marital << 2) | (byte)smoke); var rates = ratesTable[type]; double result = 0; foreach (var rate in rates) { if (age >= rate.Item1 && age < rate.Item2) { result = rate.Item3; break; } } return(result); }
/* * 通过该方法,可以看出有大量的重复内容,并且一长篇都是If else ,可读性、维护性很差 * 为此,建议大家尝试表驱动法处理该问题 */ public double GetRateByCondition(GenderEnum gender, MaritalEnum marital, SmokeEnum smoke, int age) { if (gender == GenderEnum.Male) { if (marital == MaritalEnum.Married) { if (smoke == SmokeEnum.Smoking) { if (age < 20) { return(200); } else if (age < 40) { return(300); } else if (age < 60) { return(500); } else { return(1000); } } else { //to do } } else if (marital == MaritalEnum.Single) { //to do } else if (marital == MaritalEnum.Divorce) { //to do } else { //to do } } return(0); }
public static string MapMaritalEnum(MaritalEnum v) { switch (v) { case MaritalEnum.Married: return "已婚"; case MaritalEnum.Love: return "恋爱中"; case MaritalEnum.Single: return "单身"; case MaritalEnum.Separate: return "分居"; case MaritalEnum.Divorce: return "离异"; case MaritalEnum.Secrecy: return "保密"; } return ""; }