【问题标题】:How to use switch case in for loop?如何在for循环中使用switch case?
【发布时间】:2015-06-30 08:28:53
【问题描述】:

我有一个包含以下项目的菜单:

Orange
Apple
Lemon
Banana

每个项目都有自己的 Uid,例如1 为橙色,2 为苹果等。当从菜单中单击“苹果”时,将弹出一个消息框并显示“已选择苹果”。我知道这可以通过使用 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语句,它只能接受常量。

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

【问题讨论】:

  • 一个if 语句会更合适,因为无论如何你只有一个比较
  • 这是伪代码吗? case 1: 会工作
  • 您将解析后的值分配给 itemUid 并通过在 for 循环头之后再次分配给它来丢弃它。此外,我不太确定您要做什么,您能否尝试更多地解释“更灵活”的含义?
  • switch (itemUid)case itemUid 似乎不合逻辑...
  • foreach 怎么样?

标签: c# wpf switch-statement


【解决方案1】:

假设你的菜单

<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; 

  }
}

【讨论】:

  • 可能想在转换后向 mi 添加一个空检查,尽管我猜可能有人认为如果有人将此方法与错误的事件挂钩,您希望事情崩溃和烧毁。不过,如果我正确理解 OP(我肯定不会),这似乎是正确的解决方案,即使我真的不喜欢这些大括号!
  • 嗨@AnikIslamAbhi,我知道可以这样做,但我希望它更灵活,因为我从xml中检索了这些项目,以防xml中有项目更新,至少不需要在编码中做任何事情。
  • @YWah 然后你可以打印mi.Name 而不是检查我的答案
【解决方案2】:

我不确定您要问什么,但经过一番思考后,我相信您想要与 switch-case 相同的功能,只是代码重复更少。

在这种情况下,我认为这样的事情可以解决问题:

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

【讨论】:

  • 嗨@kai,你明白了......谢谢你的回答,你真的拯救了我的一天;)
【解决方案3】:

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

switch-label:
case   constant-expression   :

改用if-语句。

【讨论】:

  • 否则你会有多个cases。这是您唯一的选择。
【解决方案4】:

Switch 语句在编译时进行评估。你不能在你的情况下使用开关。你可能想做一个 if else ,或者直接使用你的枚举

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多