将Reflection返回的Generic EntitySet转换为具有BaseClass类型的EntitySet

时间:2013-11-22 16:27:19

标签: c#-4.0 generics inheritance reflection casting

在将Reflection返回的Generic EntitySet转换为具有BaseClass类型的EntitySet时,我遇到了问题。

我的所有Linq2Sql类都继承自名为LinqClassBase的基类,如下所示:

public partial class MyTable1 : LinqClassBase

我正在该基类中编写一个需要遍历所有子EntitySets的方法。

我可以将PropertyInfo OK检索为matchingEntitySetProperty。

// The GetMatchingProperty method (not shown) 
// simply gets all the properties with Type EntitySet
var matchingProperty = entitySetProperty.GetMatchingProperty(this.GetType());

我也可以得到它的价值。

// This returns EntitySet<MyTable1>
var matchingSet = matchingProperty.GetValue(this);

这里的问题是我无法调用ToList方法,因为该对象没有强类型。

var newList = matchingSet.ToList().ConvertAll(
  x => x.MyLinqBaseClassMethod()
);

我尝试将其转换为EntitySet但它返回null:

// This returns null
var matchingSet = matchingProperty.GetValue(this) as EntitySet<LinqClassBase>;

为什么此强制转换返回null?我猜是因为C#无法将EntitySet强制转换为EntitySet。

如果这个演员阵容不可能,还有另一种方式来演员吗?

注意:我考虑过使用另一层Reflection来调用ToList方法,但是我会遇到转换方法和MyLinqBaseClassMethod同样的问题。

1 个答案:

答案 0 :(得分:1)

我明白了。将它转换为IEnumerable使我可以访问ToList方法,并且不会使它返回null。

var matchingSet = matchingProperty.GetValue(this) as IEnumerable<LinqClassBase>;

我仍然不知道为什么施放它有EntitySet失败。但至少我有我的解决方案。