我在运行时创建一个动态类型(请参阅这里:Serialize/Deserialize a dynamic object)并使用该类型在另一个类中创建动态成员。
public class SomeClass
{
private dynamic _AnimalType = CreateAnimal<Animal>("Dog");
public dynamic AnimalType { get { return _AnimalType; } }
static internal PropertyInfo[] Sprops = typeof(SomeClass).GetProperties();
static public PropertyInfo[] getPropertyInfos() { get { return Sprops; } }
}
但是,当调用以下内容时:
PropertyInfo[] Sprops = typeof(SomeClass).GetProperties();
Sprops包含一个PropertyInfo(System.Object
),它是'exptected'但不是'想要'。我想获取AnimalType当前的类型(Animal
,或更具体地Dog
)。有没有办法实现这个目标?我不想创建这个类的实例,然后调用一些“SetInternalProperties”方法。我们的想法是将这些属性作为静态提供。
答案 0 :(得分:2)
是的,PropertyInfo
无法获取字段的运行时类型。它所做的就是获取声明属性的类型。
所以它应该是
dynamic
不是吗?你为什么这么做System.Object
?
嗯,动态只是System.Object
在System.Runtime.CompilerServices.DynamicAttribute饰的封面下。这就是你看到System.Object
的原因。无法获取运行时信息(没有实例)。
有没有办法实现这个目标?:如果你能解释一下你想要达到的目标,你可以得到更好的答案。
如果你有SomeClass
的实例,你可以找到什么是运行时类型。
SomeClass instance = new SomeClass();// get instance somehow
PropertyInfo pi = ...;//Get the property info
Type dynamicType = pi.GetValue(instance).GetType();