これを行う方法がわかりません。
次のようなコードが必要です
enum myenum
{
name1 = "abc",
name2 = "xyz"
}
そしてそれをチェックしてください
if (myenum.name1 == variable)
どうすればそれらのことを行うことができますか?
ありがとう。
残念ながら、それは不可能です。列挙型は、基本的な基本型 ( int
、uint
、short
など) のみを持つことができます。列挙型の値を追加のデータに関連付ける場合は、値に属性を適用します ( などDescriptionAttribute
)。
public static class EnumExtensions
{
public static TAttribute GetAttribute<TAttribute>(this Enum value)
where TAttribute : Attribute
{
var type = value.GetType();
var name = Enum.GetName(type, value);
return type.GetField(name)
.GetCustomAttributes(false)
.OfType<TAttribute>()
.SingleOrDefault();
}
public static String GetDescription(this Enum value)
{
var description = GetAttribute<DescriptionAttribute>(value);
return description != null ? description.Description : null;
}
}
enum MyEnum
{
[Description("abc")] Name1,
[Description("xyz")] Name2,
}
var value = MyEnum.Name1;
if (value.GetDescription() == "abc")
{
// do stuff...
}
ここによれば、あなたがしていることは不可能です。おそらくできることは、定数でいっぱいの静的クラスを持つことです。おそらく次のようなものです。
class Constants
{
public static string name1 = "abc";
public static string name2 = "xyz";
}
...
if (Constants.name1 == "abc")...
これは以前ここで議論されましたが、見つけることができません。短いバージョン: 列挙メンバーに文字列値を与えることはできません。メンバー名を値として使用できますが、多くの場合、これは必要なものではありません。属性を使用して文字列値に注釈を付けてメンバーを列挙する方法については、このリンクを参照してください。
ここでいい答え。提案された回答を詳しく説明するのは、enum description を指定して enum 値を取得したい場合です。私はこれをテストしていませんが、これはうまくいくかもしれません:
列挙型:
public enum e_BootloadSource : byte
{
[EnumMember]
[Display(Name = "UART")]
[Description("UART_BL_RDY4RESET")]
UART = 1,
[EnumMember]
[Display(Name = "SD")]
[Description("SD_BL_RDY4RESET")]
SD = 2,
[EnumMember]
[Display(Name = "USB")]
[Description("USB_BL_RDY4RESET")]
USB = 3,
[EnumMember]
[Display(Name = "Fall Through Mode")]
[Description("FALL_THRGH_BL_RDY4RESET")]
FALL_THROUGH_MODE = 4,
[EnumMember]
[Display(Name = "Cancel Bootload")]
[Description("BL_CANCELED")]
CANCEL_BOOTLOAD = 5,
}
次のように使用します。
foreach(e_BootloadSource BLSource in Enum.GetValues(typeof(e_BootloadSource)))
{
if (BLSource.GetDescription() == inputPieces[(int)SetBLFlagIndex.BLSource])
{
newMetadata.BootloadSource = BLSource;
}
}
inputpieces は単なる文字列配列であり、newMetadata.BootloadSource は e_BootloadSource であることに注意してください。
やりたいことによっては、s の代わりにDictionaryenum
を使用して同じ効果を得ることができます。