我正在枚举我的EntityFramework容器属性。通过反射,我只获得DbSet
个属性。现在我需要访问属性值,我尝试了这种方式:
object obj = PropertyInfo.GetValue(myobject)
就在这里,但我需要投射到它的真实类型(我理想地需要这个):
DbSet<MyRealType> obj = ( DbSet<MyRealType> )PropertyInfo.GetValue(myobject);
但是MyRealType
在编译时是未知的。我只得到一个Type
,但我可以把它投到
DbSet<MyrealType>
。是否有可能实现这一目标?
答案 0 :(得分:0)
不,这是不可能的。你要做的是将运行时类型转换为编译时类型,许多程序员已经尝试过但未能这样做。此时您的选择主要涉及使用反射检查类型,并尝试通过反射调用该人的方法和属性。
您的另一个选择是将值转换为dynamic
,然后尝试(并希望)您的调用按预期工作。
所以在你的情况下,你最好的选择是使用动态类型:
dynamic obj = Propertyinfo.GetValue(myobject);
obj.SomeMethodYouWantToCall(); // and catch DLR errors