2017-05-10 4 views
-1

私は属性のパラメータとしてenumを使用しようとしていますが、enumの型を使用してコード内の要素を判断していますが、実際の型のenumを取得するのは難しいです。ここで 属性から値を取得するにはどうすればよいですか?

public enum DataTypes 
{ 
    ShortText, 
    LongText, 
    Number, 
    Boolean, 
    Image, 
    DatePicker, 
    RichText, 
    Content, 
    DateTimePicker, 
    ProductStatus, 
    DeliveryMethod 

} 

は属性である:ここで

は私の列挙型である私はなるだろうどのように

[DataType(Type=DataTypes.ShortText)] 
    public string store { get; set; } 

public class DataType : Attribute 
{ 
    public DataTypes Type { get; set; } 
} 

そして最後に、ここで私はそれらを適用する場所です属性をPropertyInfoから取得してDataTypes.ShortTextを返しますか?

+0

(リフレクションを介して)属性インスタンスを取得する必要があります。次に、 'Type'プロパティ値を取得します。何を試しましたか? _specifically_あなたは働くことに苦労していますか?あなたが持っている問題を確実に再現する良い[mcve]が含まれるように質問を修正し、その問題の内容を明確かつ詳細に説明してください。 –

+0

質問のタイトルを示唆/編集したのは、実際には 'enum'ではないからです。属性から取得しようとしている値が 'enum'、' int'、 'string'などの場合の答えは同じです。 –

答えて

1

まず、プロパティを取得する必要があります。最も単純な形式では、次のようになります。

var method = typeof(SomeClass).GetMethod("store"); 

GetMethodMethodInfoのインスタンスを返します。それが存在かどう

その後、属性を取得することができます。そのタイプのない属性がない場合

var attribute = method.GetCustomAttribute<DataType>(); 

GetCustomAttributeはnullを返します。しかし、その属性が存在する場合はGetCustomAttributeが返されます。

if (attribute != null) 
{ 
    var myDataType = attribute.Type; 
} 
+0

魅力のように働きました、ありがとう! =) – Jannik

関連する問題