C#cast类型为通用强类型

时间:2014-01-15 15:55:22

标签: generics dynamic reflection casting

我正在枚举我的EntityFramework容器属性。通过反射,我只获得DbSet个属性。现在我需要访问属性值,我尝试了这种方式:

object obj = PropertyInfo.GetValue(myobject) 

就在这里,但我需要投射到它的真实类型(我理想地需要这个):

DbSet<MyRealType> obj = ( DbSet<MyRealType> )PropertyInfo.GetValue(myobject);

但是MyRealType在编译时是未知的。我只得到一个Type,但我可以把它投到 DbSet<MyrealType>。是否有可能实现这一目标?

1 个答案:

答案 0 :(得分:0)

不,这是不可能的。你要做的是将运行时类型转换为编译时类型,许多程序员已经尝试过但未能这样做。此时您的选择主要涉及使用反射检查类型,并尝试通过反射调用该人的方法和属性。

您的另一个选择是将值转换为dynamic,然后尝试(并希望)您的调用按预期工作。

所以在你的情况下,你最好的选择是使用动态类型:

dynamic obj = Propertyinfo.GetValue(myobject);
obj.SomeMethodYouWantToCall(); // and catch DLR errors