我正在广泛使用foovar.GetType().GetProperty("PropertyName").GetValue(foovar)
通过反射获取变量的属性值。但它似乎不适用于接口类型。
IFoo foo = GetFoo();
string fooName= foo.Name; //It works perfectly
我正在使用第三方程序集,因此我无权访问该实现。有一个'Name'属性,我可以获得价值。但不能通过反思。
当我尝试string s = (string)foo.GetType().GetProperty("Name").GetValue(foo);
时,我收到一个空错误:没有'名字'属性
我检查了PropertyInfo[] pi = foo.GetType().GetProperties();
,我可以看到大约200个属性,其中没有一个属于“名称”。事实上,很多其他的“智能感知属性”都不会出现。
¿如何检索接口类型属性的值?
谢谢!
答案 0 :(得分:2)
返回的对象可以显式实现IFoo
,因此Name
属性将是私有的。
您可以改用接口类型:
object property = typeof(IFoo).GetProperty("Name").GetValue(foo);
编辑:如果这不起作用,那么我只能假设该属性实际上是在IFoo
实现的其他接口上定义的。
public interface IBase
{
string Name { get; }
}
public interface IFoo : IBase
{
}
在这种情况下,您需要找到声明Name
的实际界面并使用它。