編集:の代わりにGuid
を使用するように投稿を更新しました。以下の人々のおかげで、int
を使用すると、enumの基本型がint
であるため、何もしないことが指摘されています。2つの属性値のいずれかを使用してenum値を取得する方法
私はのは、この列挙型のように定義された動物の属性、使用することが
public enum AnimalType
{
[Animal("00000000000000000000000000000001")]
Bear = 0,
[Animal("00000000000000000000000000000002")]
Cat = 1,
[Animal("00000000000000000000000000000003")]
Dog = 2
}
だとしましょう、列挙型を持っている:受け入れるようにできるように、あなたはAnimalAttribute
ための2つのコンストラクタがある見ることができるように
public class AnimalAttribute : Attribute
{
public AnimalAttribute(Guid id)
{
this.AnimalId = id;
}
public AnimalAttribute(string id)
{
this.AnimalId = new Guid(id);
}
public Guid AnimalId { get; private set; }
// Some more properties
}
をidはstring
またはGuid
です。 AnimalType
enumはstring
コンストラクタを使用します。
今のところ、enum値はidを知ることによってのみアクセスできます。特定のenum値に対応するidがわからない場合は、各enum値に対応する名前/説明を使用してenum値にアクセスすることもできます(おそらく、Bearの場合は「Bear」のみ)。私の質問は、AnimalAttribute
がid(および文字列またはGuid)またはenum値に対応する名前/説明のいずれかを受け入れるように、これをどのように設定するのですか?私はそうのようなAnimalAttribute
のための別のコンストラクタをしたいと思い:
public AnimalAttribute(string name)
{
this.AnimalName = name; // assume there is an AnimalName property.
}
その後、私はそうのような各列挙値に別の属性を追加することができます。
[Animal("00000000000000000000000000000001")]
[Animal("Bear")]
Bear = 0,
だから、私はどちらかの値とI'LLを供給できます列挙型の値を取得することができます。これの問題は、AnimalAttribute
でコンストラクタにstring name
を受け入れることができないことです。もう1つのコンストラクタがstring id
を受け入れているためです。私はそれを行うことができない場合、私はオプションのパラメータでコンストラクタを作ることができると思った。これを設定する簡単な方法はありますか?
はい、あなたは正しい、それは私のミスです。この例を作ったのは、私が実際に働いていることを与えたくないからです。私が実際に働いているIDはGUIDなので、それは必要なのです。より明確にするために、上記の答えに対する私のコメントを見てください。 – Drew
@Drew私は、上記のコメントを明確にするために参考にしました。あなたは動物に対応するGUIDにアクセスできないので、動物名を含む記述属性で各列挙体を飾るだけでいいのですか?そうすれば列挙型を得ることができます。 – Dave