如何在for循环中使用switch case?
How to use switch case in for loop?
我有一个菜单,其中包含以下项目:
Orange
Apple
Lemon
Banana
每个项目都有自己的 Uid,例如1 是 Orange,2 是 Apple 等。当从菜单中单击 "Apple" 时,将弹出一个消息框并显示 "Apple is chosen"。我知道这可以通过使用 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语句中,它只能接受常量。
有什么解决这个问题的建议吗?
switch
只支持常量作为 case
中的值。来自 specs:
switch-label:
case constant-expression :
改用 if
语句。
Switch 语句在编译时求值。你不能在你的情况下使用开关。你可能想要做一个 if
else
,或者直接使用你的枚举
假设你的菜单
<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;
}
}
我不太确定你在问什么,但经过一番思考后,我相信你想要 switch-case 带来的相同功能,只是代码重复更少。
在那种情况下,我认为像这样的方法可以解决问题:
var message = string.Format("{0} is selected.", ((MenuItem) e.Source).Header);
// Do something with message
我有一个菜单,其中包含以下项目:
Orange
Apple
Lemon
Banana
每个项目都有自己的 Uid,例如1 是 Orange,2 是 Apple 等。当从菜单中单击 "Apple" 时,将弹出一个消息框并显示 "Apple is chosen"。我知道这可以通过使用 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语句中,它只能接受常量。
有什么解决这个问题的建议吗?
switch
只支持常量作为 case
中的值。来自 specs:
switch-label:
case constant-expression :
改用 if
语句。
Switch 语句在编译时求值。你不能在你的情况下使用开关。你可能想要做一个 if
else
,或者直接使用你的枚举
假设你的菜单
<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;
}
}
我不太确定你在问什么,但经过一番思考后,我相信你想要 switch-case 带来的相同功能,只是代码重复更少。
在那种情况下,我认为像这样的方法可以解决问题:
var message = string.Format("{0} is selected.", ((MenuItem) e.Source).Header);
// Do something with message