2

我有一个像 (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”。

我尝试重新安排“公共枚举 BeatSession”。当我通过“on_ended”时,它现在转到“on_accepted”。

截屏

注意 session_status 变量的监视。 在此处输入图像描述

4

5 回答 5

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;}
           ...
        }
    }
于 2012-08-17T03:10:00.453 回答
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 语句应该有任何问题,请查看以下屏幕截图。 在此处输入图像描述

于 2012-08-17T03:33:29.850 回答
0

如果 enum 实际上是一个 enum case 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;
    }
}
于 2012-08-17T03:03:47.170 回答
0

修复了问题。这就是我所做的。我将我的枚举修改为这样。

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 上的值被打乱了。所以我尝试手动设置该值,并且成功了。

谢谢大家的回复。

于 2012-08-17T04:46:53.740 回答
-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。

于 2012-08-17T03:18:20.007 回答