我想通过其属性和属性值找到一个类属性。
给出此属性和类:
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”。
答案 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"));