首页 > 解决方案 > 我们无法从财产中获得价值

问题描述

这是我的代码

public abstract class LayoutMetadata
{
    public abstract Guid StaticId { get; }
}

Public MonthlyRor:LayoutMetadata
{
        //Here we assigned static value to StaticId
     public override Guid StaticId => new Guid("1188644E-C754-4121-9625-1EDD361455D3");
}

var type = typeof(LayoutMetadata).Assembly.SafeGetTypes().Where(t => !t.IsAbstract && t != typeof(LayoutMetadata)).ToList();
var test=first.GetProperty("StaticId").GetValue(first, null);

我试过了

var test=first.GetProperty("StaticId").GetValue(first, null);

但抛出

“对象与目标类型不匹配”异常

请就此提出任何解决方案。

标签: c#c#-4.0

解决方案


首先,您似乎误解了要从中检索信息的该类型对象的类型和实例。

type在您的代码中应该是您要检查的对象的类型first,并且应该是您要检查的类型的实例type。如果是这种情况,那么您的代码应如下所示:

var test = type.GetProperty("StaticId").GetValue(first, null);

请注意,GetProperty需要从类型 object ( type) 调用,并且您要检查的对象的实例作为参数传递给方法GetValue。一个简单的例子可以清楚地说明:

var p = new Person();
var t = p.GetType();
var name = t.GetProperty("Name").GetValue(p, null);

推荐阅读