如何在for循环中使用switch case?

时间:2015-06-30 08:28:53

标签: c# wpf switch-statement

我有一个菜单,其中包含以下项目:

Orange
Apple
Lemon
Banana

每个项目都有自己的Uid,例如1是橙色,2是Apple等。当从菜单中单击“Apple”时,将弹出一个消息框并显示“Apple已被选中”。我知道这可以通过使用switch case来完成,但不是逐个进行,我想让它更灵活。例如:

MenuItem menuItem=(MenuItem)e.OriginalSource;
int itemUid=Int32.Parse(menuItem.Uid);

for (itemUid = 1; itemUid <= menuItem.Items.Count; itemUid++)
{
  switch (itemUid)
  {
    case itemUid: Console.WriteLine("{0} is chosen", menuItem.Header); break;
  }
}

问题是在case语句中,它只能接受常量。

有任何解决这个问题的建议吗?

4 个答案:

答案 0 :(得分:2)

假设你的菜单

<Menu MenuItem.Click="CommonHandler">

  <MenuItem Header="Orange" Name="Orange"/>

  <MenuItem Header="Apple" Name="Apple"/>

  <MenuItem Header="Lemon" Name="Lemon"/>

  <MenuItem Header="Banana" Name="Banana"/>

</Menu>

在您的点击处理程序

试试这个

void CommonHandler(object sender, RoutedEventArgs e) {
MenuItem mi = e.Source as MenuItem;

  switch (mi.Name) {

    case "Orange":  //do something;

      break; 

    case "Apple":  //do something else

      break; 

    case "Lemon":  //something else again

      break; 
    case "Banana":  //something else again

      break; 

  }
}

答案 1 :(得分:1)

switch仅支持常量作为case中的值。来自specs

switch-label:
case   constant-expression   :

改为使用if - 语句。

答案 2 :(得分:1)

我不确定你要问的是什么,但经过一番思考后我相信你想要一个交换机案例所带来的相同功能,只需少量代码重复。

在这种情况下,我认为这样的事情会起到作用:

var message = string.Format("{0} is selected.", ((MenuItem) e.Source).Header);
// Do something with message

答案 3 :(得分:0)

在编译时评估Switch语句。在您的情况下,您不能使用开关。您可能想要if else或直接使用您的枚举