1

カスタム属性を定義し、それをいくつかのクラスに追加しました。アセンブリ内のすべてのタイプをキャプチャするためにリフレクションを使用していることを知ってください。この属性が定義されているタイプのみを除外したいと思います。

Typeオブジェクトのプロパティを見ましたが、特定の列挙Attributes型に含まれている値のみを返します。

カスタム属性が定義されているタイプを取得するにはどうすればよいですか?

4

1 に答える 1

6

出来るよ:

object[] attributes = typeof(SomeType).GetCustomAttributes(typeof(YourAttribute), true);

しかし、私はカスタム拡張メソッドを使用することを好みます:

public static class ReflectionExtensions
{
    public static TAttribute GetAttribute<TAttribute>(this ICustomAttributeProvider obj, bool inherit)
        where TAttribute : Attribute
    {
        return obj.GetAttributes<TAttribute>(inherit).FirstOrDefault();
    }

    public static IEnumerable<TAttribute> GetAttributes<TAttribute>(this ICustomAttributeProvider obj, bool inherit)
        where TAttribute : Attribute
    {
        return obj.GetCustomAttributes(typeof (TAttribute), inherit).Cast<TAttribute>();
    }

    public static bool HasAttribute<TAttribute>(this ICustomAttributeProvider obj, bool inherit)
        where TAttribute : Attribute
    {
        return obj.GetAttributes<TAttribute>(inherit).Any();
    }
}

(タイプだけでなく、アセンブリ、メソッド、プロパティなどでも機能します)

于 2012-08-23T12:46:56.530 に答える