C#返回类中所有必需属性的列表

时间:2017-03-24 03:20:17

标签: c# reflection extension-methods

我正在尝试获取一个字典,其中包含具有Required Attribute的类中所有属性的Property和DisplayName。

我正在尝试使用此扩展方法,但PropertyDescriptor不包含Required的定义。任何方向都将不胜感激

    public static Dictionary<string, string> GetDisplayNameList<T>()
    {
        var info = TypeDescriptor.GetProperties(typeof(T))
            .Cast<PropertyDescriptor>()
            .ToDictionary(p => p.Name, p => p.DisplayName);
        return info;
    }

2 个答案:

答案 0 :(得分:1)

当然,您只需要检查该属性是否已在其上定义Required属性。您可以通过.Attributes访问此内容。例如:

public static Dictionary<string, string> GetDisplayNameList<T>()
{
    var info = TypeDescriptor.GetProperties(typeof(T))
        .Cast<PropertyDescriptor>()
        .Where(p => p.Attributes.Cast<Attribute>().Any(a => a.GetType() == typeof(RequiredAttribute)))
        .ToDictionary(p => p.Name, p => p.DisplayName);
    return info;
}

答案 1 :(得分:0)

这不起作用吗?

catch()

我在这里猜测public static Dictionary<string, string> GetNameToDisplayNameDictionary(List<T>() list) => typeof(T) .GetProperties() .Where(p => p.GetAttribute<RequiredAttribute>() != null) .ToDictionary(p => p.Name, p => p.GetAttribute<DisplayName>().Name); ,因为我离我的电脑不远......