【问题标题】:C# cast Type to generic strong typedC# 将 Type 强制转换为泛型强类型
【发布时间】:2014-02-04 04:43:51
【问题描述】:

我正在枚举我的 EntityFramework Container 属性。通过反射,我只得到DbSet 属性。现在我需要访问属性值,我是这样尝试的:

object obj = PropertyInfo.GetValue(myobject) 

这里可以,但我需要转换为它的真实类型(理想情况下我需要这个):

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

但是MyRealType 在编译时是未知的。我只得到一个Type 但我可以将它转换为 DbSet&lt;MyrealType&gt;。有可能实现吗?

【问题讨论】:

  • 请添加语言标签。

标签: c# generics dynamic reflection casting


【解决方案1】:

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

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

因此,在您的情况下,您最好可能使用动态类型:

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

【讨论】:

  • 我尝试了动态方式,但似乎不会调用扩展方法(实际上看起来很明显)。还是谢谢你。
  • 您仍然可以调用动态对象的扩展方法,这只是更多的工作。 IE:EnumerableExtensions.Select(obj, x =&gt; x.SomeProperty) 通常是obj.Select(x =&gt; x.SomeProperty)。扩展方法只是语法糖 =D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多