if文は機能するのにswitch文は機能しないのはなぜですか?質問する

if文は機能するのにswitch文は機能しないのはなぜですか?質問する

switch文字列のcharインデックスとEnumを使用してステートメントを作成しようとしていますこれ説明から選択された列挙型の値を取得するためのラッパー。これにより、文字列を列挙型の値に格納できるようになります。

私の声明は次のとおりですif

if (msgComingFromFoo[1] == Convert.ToChar(Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()))
{
    //foo
}

そしてこれが私のswitch声明です:

switch (msgComingFromFoo[1])
{
    case Convert.ToChar(Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()):
        break;
}

なぜifステートメント は受け入れられるのに対し、 は受け入れられないのでしょうかswitch? 文字列からインデックスを選択しているので、 を char に変換しようとしましたが、残念ながら機能しませんでした。

アップデート:

Message.Code列挙型はこちら

public class Message
{
    public enum Code
    {
        [Description("A")]
        FOO_TRIGGER_SIGNAL
    }
}

ご覧のとおり、列挙型に割り当てられた説明が必要です。列挙型の値0ではありません。前述のラッパーから使用するとMessage.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()A0


エラー:

定数値が期待される

ベストアンサー1

case では式を使用できません (C# 7 より前) が、switch では使用できるため、次のように機能します。

switch (ConvertToMessageCode(msgComingFromFoo[1]))
{
    case Message.Code.FOO_TRIGGER_SIGNAL:
        break;
}

ConvertToMessageCode必要な変換を列挙型に記述する必要がある場所Message.CodeConvertToMessageCode変換の詳細を抽象化するだけなので、別のメソッドは必要なく、switch ステートメント内のインライン コード (キャストなど) で間に合わせることができます。

おすすめ記事