2016-08-12 71 views
0

我有一个ServiceField类,其中包含FieldIdValue作为两个属性。设置属性值违反开关原则验证

public class ServiceField 
    { 
     public int FieldId { get; set; } 
     public string Value { get; set; }   
    } 

     /// <summary> 
     /// This method is used to assign value to HajjPackageFields class 
     /// </summary> 
     /// <param name="hajPackageObj">HajjPackageFields whose value needs to be updated</param> 

     private void UpdateDetailFieldsValue(HajjPackageFields hajPackageObj) 
     { 
      foreach (ServiceField field in GetPackageDetails(hajPackageObj.PackageId)) 
      { 

       if (field.FieldId == (int)HajjServiceFieldsEnum.AccomodationView) 
       { 
        hajPackageObj.AccomodationView = field.Value == "1"; 
       } 
       else if (field.FieldId == (int)HajjServiceFieldsEnum.AirTicket) 
       { 
        hajPackageObj.AirTicket = field.Value == "1"; 
       } 
      } 
     } 

问题是,如果任何新的财产HajjPackageField类中添加比我修改我的UpdateDetailFieldsValue方法,它是针对开闭原则。有没有其他适当的方法来完成这项任务?

+0

包含在上什么课这种方法吗? – Claies

回答

1

如果我清楚地了解你,反思,将有助于解决问题:

private void UpdateDetailFieldsValue(HajjPackageFields hajPackageObj) 
{ 
    var pairs = new Dictionary<int, string>();    
    foreach (var enumVal in typeof(HajjServiceFieldsEnum).GetEnumValues())    
     pairs[(int)(HajjServiceFieldsEnum)enumVal] = typeof(HajjServiceFieldsEnum).GetEnumName(enumVal);    

    foreach (ServiceField field in GetPackageDetails(hajPackageObj.PackageId))  
     typeof(HajjPackageFields).GetProperty(pairs[field.FieldId]) 
      ?.SetValue(hajPackageObj, field.Value == "1"); 
}