0

.Net でBrowsableAttributeを明示的に Yes に設定せずに、特定の型のすべてのプロパティを見つける方法はありますか?

次のコードを試しましたが成功しませんでした (デフォルトで参照可能なすべてのプロパティも返されます)。

PropertyDescriptorCollection browsableProperties = TypeDescriptor.GetProperties(type, new Attribute[] { BrowsableAttribute.Yes });
4

1 に答える 1

1

ここでは、ちょっとした反省と linq が役に立ちます。

var result =  type
    .GetProperties()
    .Where(x =>
            x.GetCustomAttribute<BrowsableAttribute>() == null ||
            !x.GetCustomAttribute<BrowsableAttribute>().Browsable)
    .ToList();

GetCustomAttributeメソッドを 2 回呼び出すのを避けるために、ローカル変数を導入できます。

GetCustomAttribute.Net フレームワークのバージョンが 4.5 未満の場合は、次のような独自の拡張メソッドを作成できます。

public static T GetCustomAttribute<T>(this MemberInfo element) where T: Attribute
{
    return (T) element.GetCustomAttribute(typeof(T));
}
于 2014-08-05T10:25:33.523 に答える