我有一个类似(a,b,c,d)的枚举。
public enum BeatSession
{
on_ended,
on_new,
on_hold,
on_paused,
on_accepted,
on_answered,
on_timed_out,
on_hanged_up,
on_initiated,
unknown
}
和一个切换枚举的方法。
public static string GetStatusMessage(BeatSession status, string custom_message="")
{
string msg = "";
try
{
switch (status)
{
case BeatSession.on_answered:
// msg will be here
break;
case BeatSession.on_ended:
// msg will be here
break;
case BeatSession .on_hanged_up:
// msg will be here
break;
case BeatSession.on_hold:
// msg will be here
break;
case BeatSession.on_new:
break;
case BeatSession.on_paused:
// msg will be here
break;
case BeatSession.on_timed_out:
// msg will be here
break;
case BeatSession.on_accepted:
// msg will be here
break;
default:
msg = "Unknown";
break;
}
}
catch (Exception ex)
{
throw ex;
}
// Override message
if (!String.IsNullOrEmpty(custom_message))
{
msg = custom_message;
}
return msg;
}
更新
但是,每次我调用我的方法GetStatusMessage(BeatSession.on_ended)。 即使我通过“on_ended”,也会转到“on_answered”。
我尝试重新安排“public enum BeatSession”。当我通过“on_ended”时,它现在转到“on_accepted”。
截图
请注意session_status的监视器是否可变。
答案 0 :(得分:1)
我有一些代码,我会做这样的事情
public enum Letters
{
A = 1,
B = 2,
...
}
public void someFunction(int value)
{
switch(value)
{
case (int)Letters.A: {/* Code */ break;}
case (int)Letters.B: {/* Code */ break;}
...
}
}
它有效,但我认为你要做的是发送枚举并在交换机的开关中使用它,也许这样的东西可以工作
public void someFunction(Letters l)
{
switch(l)
{
case Letters.A: {/* Code */ break;}
case Letters.B: {/* Code */ break;}
...
}
}
答案 1 :(得分:1)
您当前的代码不应该编译,以下是主要问题。
首先,方法定义包含参数enum status
,你不能这样做,看来你需要一个BeatSession
类型的参数,你应该将函数修改为:
public static string GetStatusMessage(BeatSession status, string custom_message="")
{
...
}
您的案例陈述中的下一件事是,您使用enum.on_answered
,这应该是BeatSession.on_answered
。所以你的完整功能应该是:
public static string GetStatusMessage(BeatSession status, string custom_message = "")
{
string msg = "";
try
{
switch (status)
{
case BeatSession.on_answered:
// msg will be here
break;
case BeatSession.on_ended:
// msg will be here
break;
case BeatSession.on_hanged_up:
// msg will be here
break;
case BeatSession.on_hold:
// msg will be here
break;
case BeatSession.on_new:
break;
case BeatSession.on_paused:
// msg will be here
break;
case BeatSession.on_timed_out:
// msg will be here
break;
case BeatSession.on_accepted:
// msg will be here
break;
default:
msg = "Unknown";
break;
}
}
catch (Exception ex)
{
throw ex;
}
// Override message
if (!String.IsNullOrEmpty(custom_message))
{
msg = custom_message;
}
return msg;
}
编辑:由于您使用答案代码编辑了问题,因此您的switch语句应该有任何问题,请查看以下屏幕截图。
答案 2 :(得分:0)
如果枚举实际上是一个枚举案例:a:不会传递编译。
这对我有用
enum myEnum {A, B, C};
public MainWindow()
{
InitializeComponent();
myEnum thisEnum = myEnum.B;
switch(thisEnum)
{
case myEnum.A:
// do something
break;
case myEnum.B:
// do something
break;
default:
break;
}
}
答案 3 :(得分:0)
修正了问题。这就是我做的。我修改了我的Enum就是这样。
public enum BeatSession
{
on_ended=0,
on_new=1,
on_hold=2,
on_paused=3,
on_accepted=4,
on_answered=5,
on_timed_out=6,
on_hanged_up=7,
on_initiated=8,
unknown=9
}
所以我认为发生的事情是在运行时或编译时的某个时刻,我的Enum上的值被扰乱了。所以我尝试手动设置值,这就是诀窍。
感谢大家的回复。
答案 4 :(得分:-1)
也许你的代码就像:
public static string GetStatusMessage(BeatSession status, string custom_message = "")
{
string msg = "";
try
{
switch (status)
{
case BeatSession.on_answered:
// msg will be here
case BeatSession.on_ended:
// msg will be here
break;
.....
如果你传递BeatSession.on_answered然后在swith(想想你错过了“break;”)去了BeatSession.on_ended。