0

私は列挙型を持っています

[Flags]
public enum MyEnum
{
   Item1 = 32768,
   Item2 = 65536,
   Item3 = 524288,
   Item4 = Item3
}

ToString() 操作の結果:

MyEnum.Item3.ToString() - "Item4"
MyEnum.Item4.ToString() - "Item4"

取得することは可能ですか:

MyEnum.Item3.ToString() - "Item3"
MyEnum.Item4.ToString() - "Item4" 

?

4

4 に答える 4

5

いいえ、できません。

複数の列挙型メンバーが同じ基になる値を持ち、その基になる値に基づいて列挙型メンバーの名前の文字列表現を取得しようとする場合、メソッドが返す名前についてコードで仮定を行うべきではありません。

Enum.ToString()方法

于 2013-08-22T10:42:59.763 に答える
0

まず、同じ値を持つ 2 つのアイテムが必要な理由がわかりません。ただし、同じ列挙値が必要であるが、後で別の名前が必要な場合は、DescriptionAttributein System.ComponentModel?を使用してみてください。

[Flags]
public enum MyEnum
{
   [DescriptionAttribute("Item1")]Item1 = 32768,
   [DescriptionAttribute("Item2")]Item2 = 65536,
   [DescriptionAttribute("Item3")]Item3 = 524288,
   [DescriptionAttribute("Item4")]Item4 = Item3
}

次に、このメソッドを使用して説明の値を取得できます。

public string ValueOf(Enum value)
{
    FieldInfo fi = value.GetType().GetField(value.ToString());
    DescriptionAttribute[] attributes = (DescriptionAttribute[]) fi.GetCustomAttributes( typeof(DescriptionAttribute), false);
    if (attributes.Length > 0)
    {
        return attributes[0].Description;
    }
    else
    {
        return value.ToString();
    }
}

私は実際にこれを試していないので、@MarcinJuraszek が投稿した MSDN の引用はここでも適用される可能性があります。

ソース: http://blog.waynehartman.com/articles/84.aspx

于 2013-08-22T10:55:40.960 に答える
0

いいえ、enum文字列のコレクションではないためです。これらは、特定の型 (通常は ) の積分を含むことができる値型でありint、これらの積分の一部は「名前」 (あなたの Item4) に接続されています。

于 2013-08-22T10:43:23.217 に答える
0

いいえ、あなたはItem4と等しいように設定しItem3、タイプセーフな int (列挙型) であるため、CLR は違いを見分けることができません。

Item4期待どおりの結果が得られるように、別の値に設定してみてください。

于 2013-08-22T10:43:20.153 に答える