实现if else语句的通用方法

Eni*_*ate 1 c# asp.net refactoring c#-4.0

我在下拉列表中有很多if-else语句选择更改事件,用于根据当前下拉列表中的值select选择填充另一个下拉列表.是否有任何通用方法可以减少这些带有任何参数类型的if-else语句..和这是我的下拉列表选择更改事件的代码

protected void ddlBr1Type_SelectedIndexChanged(object sender, EventArgs e)
{
      if (ddlBr1Type.SelectedValue.ToString() == ValidationFields.FO.ToString())
      {
           ddlBr2Type.DataSource = populateNearByDropdown(ValidationFields.FO.ToString());
           ddlBr2Type.DataBind();
      }
      else if (ddlBr1Type.SelectedValue.ToString() == ValidationFields.FW.ToString())
      {
          ddlBr2Type.DataSource = populateNearByDropdown(ValidationFields.FW.ToString());
            ddlBr2Type.DataBind();

     }
     else if (ddlBr1Type.SelectedValue.ToString() == ValidationFields.UF.ToString())
     {
          ddlBr2Type.DataSource = populateNearByDropdown(ValidationFields.UF.ToString());
            ddlBr2Type.DataBind();
     }
     else if (ddlBr1Type.SelectedValue.ToString() == ValidationTypes.O.ToString())
     {
         ddlBr2Type.DataSource = populateNearByDropdown(ValidationTypes.O.ToString());
            ddlBr2Type.DataBind();
     }
     else if (ddlBr1Type.SelectedValue.ToString() == ValidationTypes.W.ToString())
     {
          ddlBr2Type.DataSource = populateNearByDropdown(ValidationTypes.W.ToString());
            ddlBr2Type.DataBind();
     }
     else if (ddlBr1Type.SelectedValue.ToString() == ValidationTypes.P.ToString())
     {
          ddlBr2Type.DataSource = populateNearByDropdown(ValidationTypes.P.ToString());
            ddlBr2Type.DataBind();
     }
     else if (ddlBr1Type.SelectedValue.ToString() == ValidationTypes.C.ToString())
     {
            ddlBr2Type.DataSource = populateNearByDropdown(ValidationTypes.C.ToString());
            ddlBr2Type.DataBind();
      }

  }
Run Code Online (Sandbox Code Playgroud)

这里ValidationTypes和validationfields是一个enumlists,这是PopulateNearbyDropdown方法的代码

   private List<string> populateNearByDropdown(String Item1)
    {
        var MatchedItems =  new List<string>();
        var listofitems = new List<string> { "FO", "FW", "O", "W", "UF" };
        if (listofitems.Any(str => str.Contains(Item1)))
        {
            MatchedItems = new List<string> { Item1, ValidationTypes.P.ToString(), ValidationTypes.C.ToString() };
        }
        else if (Item1 == "P")
        {
            MatchedItems = new List<string> { Item1, ValidationTypes.C.ToString() };            
        }
        else if (Item1 == "C")
        {
            MatchedItems = new List<string> { Item1, ValidationTypes.U.ToString() };
        }
        else if (Item1 == "U"  || Item1 == "FC")
        {
            MatchedItems = new List<string> { Item1 };

        }
        return MatchedItems.ToList();
    }
Run Code Online (Sandbox Code Playgroud)

任何人都会对此有所帮助..非常感谢提前......

not*_*row 10

嗯?

它可以清楚地简化为

{
  ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
  ddlBr2Type.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

除非你想要一些检查(ddlBr1Type有效).

在这种情况下

{
    var valid = new HashSet<string>{ ValidationFields.FW.ToString(), ..... };
    if (valid.Contains(ddlBr1Type.SelectedValue))
    {
        ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
        ddlBr2Type.DataBind();
    }
}
Run Code Online (Sandbox Code Playgroud)