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」になります。

「public enum BeatSession」を並べ替えてみました。「on_ended」を渡すと、「on_accepted」になります。

スクリーンショット

session_status 変数の監視に注意してください。 ここに画像の説明を入力

4

5 に答える 5

1

現在のコードはコンパイルできません。主な問題は次のとおりです。

まず、メソッド定義に parameter が含まれていますenum status。それはできません。type のパラメーターが必要なようです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 に答える
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 に答える
0

enumが実際にenumケースである場合、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

問題を修正しました。これが私がしたことです。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
}

したがって、実行時またはコンパイル時のある時点で、列挙型の値がスクランブルされたと思います。そのため、値を手動で設定してみましたが、うまくいきました。

返信ありがとうございます。

于 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 を渡すと、すぐに ("break;" を逃したと思います)、BeatSession.on_ended に移動します。

于 2012-08-17T03:18:20.007 に答える