特定のオブジェクトに特定の属性があるかどうかをチェックする拡張メソッドを作成しようとしています。
次の構文でチェックする例を見つけました。
private static bool IsMemberTested(MemberInfo member)
{
foreach (object attribute in member.GetCustomAttributes(true))
{
if (attribute is IsTestedAttribute)
{
return true;
}
}
return false;
}
今、私は次のことをしようとしています:
public static bool HasAttribute<T>(this T instance, Type attribute)
{
return typeof(T).GetCustomAttributes(true).Any(x => x is attribute);
}
ただし、「タイプまたは名前空間の「属性」がありません...」というメッセージが表示されます。
何が間違っていて、与えられた例とは異なります/どうすればこれを実現できますか?
編集:
ヒントをありがとう、私は今このようにそれを行うことができました:
public static bool HasAttribute<T>(this T instance, Type attribute)
{
return typeof(T).GetCustomAttributes(attribute, true).Any();
}
そして、属性のチェックは次のようになります。
var cc = new CustomClass();
var nullable = cc.HasAttribute(typeof(NullableAttribute));
助けてくれてありがとう。今、私は別の質問があります。クラスのプロパティ、文字列型のプロパティを属性で装飾し、後でそのプロパティに属性があるかどうかを確認したいとします。これは型でのみ機能するため、プロパティレベルで適用することはできません。プロパティチェックの解決策はありますか?