C# 是否从自定义属性属性中获取值?

C# 是否从自定义属性属性中获取值?,c#,.net,custom-properties,C#,.net,Custom Properties,我编写了一个自定义属性,用于类的某些成员: public class Dummy { [MyAttribute] public string Foo { get; set; } [MyAttribute] public int Bar { get; set; } } 我能够从类型中获取自定义属性并找到我的特定属性。我不知道该怎么做的是获取指定属性的值。当我获取Dummy的一个实例并将其(作为对象)传递给我的方法时,如何获取从.GetProperties()返回

我编写了一个自定义属性,用于类的某些成员:

public class Dummy
{
    [MyAttribute]
    public string Foo { get; set; }

    [MyAttribute]
    public int Bar { get; set; }
}
我能够从类型中获取自定义属性并找到我的特定属性。我不知道该怎么做的是获取指定属性的值。当我获取Dummy的一个实例并将其(作为对象)传递给我的方法时,如何获取从.GetProperties()返回的PropertyInfo对象并获取分配给.Foo和.Bar的值

编辑:

我的问题是我不知道如何正确地调用GetValue

void TestMethod (object o)
{
    Type t = o.GetType();

    var props = t.GetProperties();
    foreach (var prop in props)
    {
        var propattr = prop.GetCustomAttributes(false);

        object attr = (from row in propattr where row.GetType() == typeof(MyAttribute) select row).First();
        if (attr == null)
            continue;

        MyAttribute myattr = (MyAttribute)attr;

        var value = prop.GetValue(prop, null);
    }
}

但是,当我这样做时,prop.GetValue调用会给我一个TargetException-对象与目标类型不匹配。如何构造此调用以获取此值?

使用
.GetProperties()
和调用方法获取
属性信息数组

可以这样说:

var value = prop.GetValue(o, null);

您需要将对象本身传递给GetValue,而不是属性对象:

var value = prop.GetValue(o, null);
还有一件事-您不应该使用.First(),而应该使用.FirstOrDefault(),因为如果某些属性不包含任何属性,您的代码将引发异常:

object attr = (from row in propattr 
               where row.GetType() == typeof(MyAttribute) 
               select row)
              .FirstOrDefault();

澄清;OP将需要一个虚拟类的实例,以便从中获取属性值。单靠一个类型是不够的。我已经更新了我的问题--我的问题就是.GetValue以及如何调用它以使其实际工作。同意FirstOrDefault--这主要是一个人为的示例来演示问题,但感谢您的帮助。真不敢相信是这样。