默认省略案例

时间:2014-02-21 06:24:10

标签: c# switch-statement

使用Switch case有些值被插入到dropdwnlist中。当不同的用户被挂起时,下拉值是不同的。在默认情况下,我不能接受这种情况下的公共值。所以我省略了默认情况。但我不知道知道它会导致未来的问题。如果有人可以帮助我,有些建议可以解决这个问题。 代码给出了Bellow

private void loadUserGroup()
{
    CUsers objCUsers = new CUsers();
    ddlUserGroup.Items.Clear();
    // ddlUserGroup.Items.Insert(0, new ListItem("", "0"));
    ddlUserGroup.Items.Insert(0, new ListItem("Admin", "2"));
    string suserid = User.Identity.Name;
    int iUserID = Convert.ToInt32(suserid.ToString());
    long iUserGroup = objCUsers.SelectUserGroup(iUserID);
    switch (iUserGroup)
    {
        case 2:
            ddlUserGroup.Visible = false;
            lblUserGroup.Visible = false;
           break;
        case 3:
            ddlUserGroup.Visible = true;
            lblUserGroup.Visible = true;
            ddlUserGroup.Items.Clear();
            ddlUserGroup.Items.Insert(0, new ListItem("Dealer", "5"));
            ddlUserGroup.Items.Insert(1, new ListItem("CompanyAdmin", "4"));//Similar To Admin
           break;
        case 4:
            ddlUserGroup.Items.Clear();
            ddlUserGroup.Items.Insert(0, new ListItem("CompanyAdmin", "4"));
           break;
        case 5:
            ddlUserGroup.Items.Clear();
            ddlUserGroup.Items.Insert(0, new ListItem("Client", "6"));
           break;
    }

}

3 个答案:

答案 0 :(得分:0)

switch C#

If there is no default section, no action is taken and control is transferred
outside the switch statement.

试试这个

default:
 ddlUserGroup.Items.Clear();
break

答案 1 :(得分:0)

听起来你的问题是在你的情况下根本不存在合适的默认选项,是吗?然后我想你有两个选择:

将其视为错误,然后以某种方式在外部范围内处理它:

case default:
    throw new Exception("No valid user!");
    break;

...否则,您可以提供一个空的下拉列表(或通过清除它来确保下拉列表为空):

case default:
    ddlUserGroup.Items.Clear();
    // Nothing to add here!
    break;

后者在这里几乎与不包括default几乎相同,只是你明确地确保它在这里是空的。你可以在整个Switch-case之前做到这一点,但是如果你打算在每种情况下清除它。

答案 2 :(得分:0)

switch语句中缺少的默认分支本身应该不是问题。特别是当您的问题与用户权限相关时,最好是具体而不是因为在不应该执行时执行的默认分支而产生不需要的影响。另一种方法是在默认分支中显式抛出异常,以便发出意外值。

但是,从可维护性的角度来看,switch语句通常是有问题的。现在,这个switch语句可能是唯一一个处理不同用户权限的语句。随着应用程序的增长,需要以不同方式处理用户权限的几个位置。如果您需要添加用户权限,则必须更改所有这些位置 - 您可能会错过其中一个。

因此,多态方法更适合这种情况。在您的示例中,您可以向CUsers添加一个返回ComboBox值的属性,而不是从CUsers检索用户组。该属性返回IEnumerable<UserGroup>IReadOnlyCollection<UserGroup>,其中UserGroup是一个至少包含属性NameId的新类。您使用此属性的代码将不再包含switch语句:

private void loadUserGroup()
{
    CUsers objCUsers = new CUsers();
    ddlUserGroup.Items.Clear();
    // ddlUserGroup.Items.Insert(0, new ListItem("", "0"));
    ddlUserGroup.Items.Insert(0, new ListItem("Admin", "2"));
    string suserid = User.Identity.Name;
    int iUserID = Convert.ToInt32(suserid.ToString());
    // Get user groups using the new property
    var userGroups = objCUsers.UserGroups;
    lblUserGroup.Visible = userGroups.Any();
    ddlUserGroup.Visible = lblUserGroup.Visible;
    ddlUserGroup.Items.Clear();
    foreach(var userGroup in userGroups)
       ddlUserGroup.Items.Add(new ListItem(userGroup.Name, userGroup.Id));
}

如您所见,您的代码要短得多。用户组的所有后续更改都将在CUsers中完成。如果您将所有与用户权限相关的方法移至CUsers,则只需更改CUsers,而不是运行大量代码并更改许多位置。忘记一个地方的可能性不大。