通过属性值查找类属性

时间:2018-08-03 17:29:48

标签: c# .net

我想通过其属性和属性值找到一个类属性。

给出此属性和类:

class MyAttribute : Attribute
{
    public MyAttribute(string name)
    {
        Name = name;
    }

    public string Name { get; set; }
}


class MyClass
{
    [MyAttribute("Something1")]
    public string Id { get; set; }

    [MyAttribute("Something2")]
    public string Description { get; set; } 
}

我知道我可以找到这样的特定属性:

var c = new MyClass();
var props = c.GetType().GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(MyAttribute)));

但是如何过滤属性名称值“ Something2”?

所以我的最终目标是通过在MyClass中搜索值为“ Something”的属性MyAttribute来输出“ MyClass.Description”。

2 个答案:

答案 0 :(得分:2)

以古老的foreach风格

var c = new MyClass();
var props = c.GetType().GetProperties()
    .Where(prop => Attribute.IsDefined(prop, typeof(MyAttribute)));

foreach (var prop in props)
{
    MyAttribute myAttr = (MyAttribute)Attribute.GetCustomAttribute(prop, typeof(MyAttribute));
    if (myAttr.Name == "Something2")
        break; //you got it
}

答案 1 :(得分:2)

您也可以做类似的事情

var c = new MyClass();
var props = c.GetType()
             .GetProperties()
             .Where(prop => prop.GetCustomAttributes(false)
                                .OfType<MyAttribute>()
                                .Any(att => att.Name == "Something1"));