ICustomAttributeProvider
インターフェイスの実装から必要な属性を取得する単純な拡張メソッドを作成できます(これは、属性を持つことができる.NET構造の任意の表現によって実装されます)。
public static IEnumerable<T> GetCustomAttributes(
this ICustomAttributeProvider provider, bool inherit) where T : Attribute
{
// Validate parameters.
if (provider == null) throw new ArgumentNullException("provider");
// Get custom attributes.
return provider.GetCustomAttributes(typeof(T), inherit).
Cast<T>();
}
そこから、次のPropertyInfo
ように、タイプ上のすべてのインスタンスに対する呼び出しです。
var attributes =
// Get all public properties, you might want to
// call a more specific overload based on your needs.
from p in obj.GetType().GetProperties()
// Get the attribute.
let attribute = p.GetCustomAttributes<GridColumnAttribute>().
// Assuming allow multiple is false.
SingleOrDefault().
// Filter out null properties.
where attribute != null
// Map property with attribute.
select new { Property = p, Attribute = attribute };
そこから、任意のオブジェクトインスタンスでGetType
メソッドを呼び出し、上記のクエリを実行して、PropertyInfo
インスタンスとそれに適用される属性を取得できます。