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()
、A
0
エラー:
定数値が期待される
ベストアンサー1
case では式を使用できません (C# 7 より前) が、switch では使用できるため、次のように機能します。
switch (ConvertToMessageCode(msgComingFromFoo[1]))
{
case Message.Code.FOO_TRIGGER_SIGNAL:
break;
}
ConvertToMessageCode
必要な変換を列挙型に記述する必要がある場所Message.Code
。ConvertToMessageCode
変換の詳細を抽象化するだけなので、別のメソッドは必要なく、switch ステートメント内のインライン コード (キャストなど) で間に合わせることができます。