Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实现if-else语句的一般方法_C#_Asp.net_C# 4.0_Refactoring - Fatal编程技术网

C# 实现if-else语句的一般方法

C# 实现if-else语句的一般方法,c#,asp.net,c#-4.0,refactoring,C#,Asp.net,C# 4.0,Refactoring,我在下拉列表selected change事件中有很多if-else语句,用于根据当前下拉列表中的值select填充另一个下拉列表。。 是否有任何通用方法可以减少任何参数类型的if-else语句的数量。。 这是我在下拉列表中选择的更改事件的代码 protected void ddlBr1Type_SelectedIndexChanged(object sender, EventArgs e) { if (ddlBr1Type.SelectedValue.ToString() == V

我在下拉列表selected change事件中有很多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();
      }

  }
这里ValidationTypes和validationfields是一个枚举列表,这是PopulateneArbHydropdown方法的代码

   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();
    }
私有列表populateneArbHydropdown(字符串项1)
{
var MatchedItems=新列表();
var listofitems=新列表{“FO”、“FW”、“O”、“W”、“UF”};
if(listofitems.Any(str=>str.Contains(Item1)))
{
MatchedItems=新列表{Item1,ValidationTypes.P.ToString(),ValidationTypes.C.ToString()};
}
否则如果(项目1==“P”)
{
MatchedItems=新列表{Item1,ValidationTypes.C.ToString()};
}
否则,如果(项目1==“C”)
{
MatchedItems=新列表{Item1,ValidationTypes.U.ToString()};
}
否则如果(项目1==“U”| |项目1==“FC”)
{
MatchedItems=新列表{Item1};
}
返回MatchedItems.ToList();
}
有谁能帮忙吗。。 非常感谢

它可以清楚地简化为

{
  ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
  ddlBr2Type.DataBind();
}
除非需要检查(ddlBr1Type是否有效)

那么

{
    var valid = new HashSet<string>{ ValidationFields.FW.ToString(), ..... };
    if (valid.Contains(ddlBr1Type.SelectedValue))
    {
        ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
        ddlBr2Type.DataBind();
    }
}
{
var valid=new HashSet{ValidationFields.FW.ToString();
if(有效的.Contains(ddlBr1Type.SelectedValue))
{
ddlBr2Type.DataSource=populatenearbhydropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();
}
}

它可以清楚地简化为

{
  ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
  ddlBr2Type.DataBind();
}
除非需要检查(ddlBr1Type是否有效)

那么

{
    var valid = new HashSet<string>{ ValidationFields.FW.ToString(), ..... };
    if (valid.Contains(ddlBr1Type.SelectedValue))
    {
        ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
        ddlBr2Type.DataBind();
    }
}
{
var valid=new HashSet{ValidationFields.FW.ToString();
if(有效的.Contains(ddlBr1Type.SelectedValue))
{
ddlBr2Type.DataSource=populatenearbhydropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();
}
}

如果我没有误读您的代码,应该这样做:

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

如果我没有误读您的代码,应该这样做:

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

因为您依赖于字符串相等,所以我认为您根本不需要任何逻辑。此if语句:

if (ddlBr1Type.SelectedValue.ToString() == ValidationFields.FO.ToString())
{
     ddlBr2Type.DataSource = populateNearByDropdown(ValidationFields.FO.ToString());
     ddlBr2Type.DataBind();
}
可以折叠为:

ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();

所有其他if语句都消失了。

因为您依赖于字符串相等,所以我认为您根本不需要任何逻辑。此if语句:

if (ddlBr1Type.SelectedValue.ToString() == ValidationFields.FO.ToString())
{
     ddlBr2Type.DataSource = populateNearByDropdown(ValidationFields.FO.ToString());
     ddlBr2Type.DataBind();
}
ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();
可以折叠为:

ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();

以及所有其他if语句消失。

您只需执行以下操作:

ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();
ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();

...

private List<string> populateNearByDropdown(String Item1)
{
    switch(Item1)
    {
        case "FO":
        case "FW":
        case "O":
        case "W":
        case "UF":
            return new List<string> { Item1, ValidationTypes.P.ToString(), ValidationTypes.C.ToString() };
        case "P":
            return new List<string> { Item1, ValidationTypes.C.ToString() };
        case "C":
            return new List<string> { Item1, ValidationTypes.U.ToString() };
        case "U":
        case "FC":
            return new List<string> { Item1 };
        default:
            return new List<string>();
    }
}
ddlBr2Type.DataSource=populatenearbhydropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();
...
私有列表PopulateneArbHydropdown(字符串项1)
{
开关(项目1)
{
案例“FO”:
案例“FW”:
案例“O”:
案例“W”:
案例“UF”:
返回新列表{Item1,ValidationTypes.P.ToString(),ValidationTypes.C.ToString()};
案例“P”:
返回新列表{Item1,ValidationTypes.C.ToString()};
案例“C”:
返回新列表{Item1,ValidationTypes.U.ToString()};
案例“U”:
案例“FC”:
返回新列表{Item1};
违约:
返回新列表();
}
}

您可以简单地执行以下操作:

ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();

...

private List<string> populateNearByDropdown(String Item1)
{
    switch(Item1)
    {
        case "FO":
        case "FW":
        case "O":
        case "W":
        case "UF":
            return new List<string> { Item1, ValidationTypes.P.ToString(), ValidationTypes.C.ToString() };
        case "P":
            return new List<string> { Item1, ValidationTypes.C.ToString() };
        case "C":
            return new List<string> { Item1, ValidationTypes.U.ToString() };
        case "U":
        case "FC":
            return new List<string> { Item1 };
        default:
            return new List<string>();
    }
}
ddlBr2Type.DataSource=populatenearbhydropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();
...
私有列表PopulateneArbHydropdown(字符串项1)
{
开关(项目1)
{
案例“FO”:
案例“FW”:
案例“O”:
案例“W”:
案例“UF”:
返回新列表{Item1,ValidationTypes.P.ToString(),ValidationTypes.C.ToString()};
案例“P”:
返回新列表{Item1,ValidationTypes.C.ToString()};
案例“C”:
返回新列表{Item1,ValidationTypes.U.ToString()};
案例“U”:
案例“FC”:
返回新列表{Item1};
违约:
返回新列表();
}
}

您可以使用开关。但是因为每次你重复比较正确的标准,假设它不会改变,我就简单地重写这样的第一个方法:

ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();

至于第二个,我会想到一个swtich/case,或者是这种类型的值的一些反射(ValidationTypes.[letter].ToString())但是它不是很恒定,所以我不确定。

你可以使用一个开关。但是因为每次你重复比较正确的PAR,并且假设它不会改变,我就简单地重写这样的第一个方法:

ddlBr2Type.DataSource = populateNearByDropdown(ddlBr1Type.SelectedValue.ToString());
ddlBr2Type.DataBind();
至于第二个,我可能会想到一个swtich/case,或者这种类型的值的一些反映(ValidationTypes.[letter].ToString(),但它不是常数,所以我不确定。

我认为是委托 结帐

我想
签出

使用语句?切换案例如何使用语句?切换案例如何再等4分钟打勾:)再等4分钟打勾:)