我在运行时创建一个动态类型(请参阅此处的操作:序列化/反序列化动态对象),并使用该类型在另一个类中创建动态成员。
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
),它是"expected",但不是"wanted"。我想获得AnimalType当前的类型(Animal
,或者更具体地说Dog
)。有什么办法可以做到这一点吗?我不想创建这个类的实例,然后调用一些"SetInternalProperties"方法。其思想是使这些属性作为静态属性随时可用。
PropertyInfo
无法获取字段的运行时类型。它所做的只是为您获取所声明的属性的类型。
所以它应该是
dynamic
的东西,不是吗?你为什么System.Object
?
好吧,dynamic只是用System.Runtime.CompilerServices.DynamicAttribute装饰的封面下的System.Object
。这就是为什么你只看到System.Object
。无法获取运行时信息(没有实例)。
有什么方法可以做到这一点吗:若你们能解释一下你们正在努力实现的目标,你们可能会得到更好的答案。
如果您有SomeClass
的实例,您可以找到什么是运行时类型。
SomeClass instance = new SomeClass();// get instance somehow
PropertyInfo pi = ...;//Get the property info
Type dynamicType = pi.GetValue(instance).GetType();