基本情景是:
class MyBase {}
class MyClassA : MyBase {}
class MyClassB : MyBase {}
class MyClassC : MyBase {}
我有一个名为IEnumerable
的{{1}} MyBase
集合,其实际上包含source
,MyClassA
或MyClassB
个项目的集合。总是只有一个或另一个。
我现在想要创建该集合的过滤副本,以便执行与此类似的操作:
MyClassC
问题是,如果我在源上调用GetType()方法,它会说它是MyClass(A,B或C)的集合。但是,对过滤器执行GetType()表示它是MyBase的集合!
我需要它保持不变!
这会导致我出现问题,因为我将过滤后的集合绑定到IEnumerable<MyBase> filtered = source.Where(s => s.SomeProperty == someVar)
,现在无法在过滤后的集合中看到它所需的PivotControl
属性。
因为我们不知道集合中有哪个A,B或C类,所以我甚至试过这个:
MyClass
- 或 -
var entity = source.FirstOrDefault();
IEnumerable<MyBase> filtered = FilterData(entity);
IEnumerable<MyBase> FilterData<T>(T typeOfObject) where T : MyBase
{
IEnumerable<T> data = from s in source where s.SomeProperty == someVar select s as T;
return data;
但它仍然以同样的方式显示。
由于
答案 0 :(得分:1)
我对你的问题感到很困惑,但认为这是关于Cast
扩展方法的全部内容:
IEnumerable<MyClass> filtered = source.Where(s => s.SomeProperty = someVar).Cast<MyClass>();