我有一个菜单,其中包含以下项目:
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语句中,它只能接受常量。
有任何解决这个问题的建议吗?
答案 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)
答案 2 :(得分:1)
我不确定你要问的是什么,但经过一番思考后我相信你想要一个交换机案例所带来的相同功能,只需少量代码重复。
在这种情况下,我认为这样的事情会起到作用:
var message = string.Format("{0} is selected.", ((MenuItem) e.Source).Header);
// Do something with message
答案 3 :(得分:0)
在编译时评估Switch语句。在您的情况下,您不能使用开关。您可能想要if
else
或直接使用您的枚举