カスタム属性を定義し、それをいくつかのクラスに追加しました。アセンブリ内のすべてのタイプをキャプチャするためにリフレクションを使用していることを知ってください。この属性が定義されているタイプのみを除外したいと思います。
Typeオブジェクトのプロパティを見ましたが、特定の列挙Attributes
型に含まれている値のみを返します。
カスタム属性が定義されているタイプを取得するにはどうすればよいですか?
カスタム属性を定義し、それをいくつかのクラスに追加しました。アセンブリ内のすべてのタイプをキャプチャするためにリフレクションを使用していることを知ってください。この属性が定義されているタイプのみを除外したいと思います。
Typeオブジェクトのプロパティを見ましたが、特定の列挙Attributes
型に含まれている値のみを返します。
カスタム属性が定義されているタイプを取得するにはどうすればよいですか?
出来るよ:
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();
}
}
(タイプだけでなく、アセンブリ、メソッド、プロパティなどでも機能します)