基类和派生类的混淆
本文关键字:派生 基类 | 更新日期: 2023-09-27 18:09:09
基本情况如下:
class MyBase {}
class MyClassA : MyBase {}
class MyClassB : MyBase {}
class MyClassC : MyBase {}
我有一个MyBase
的IEnumerable
集合称为source
,它实际上包含MyClassA
, MyClassB
或MyClassC
项的集合。总是只有一个或另一个。
我现在想要创建该集合的过滤副本,所以我执行类似的操作:
IEnumerable<MyBase> filtered = source.Where(s => s.SomeProperty == someVar)
问题是,如果我在源上调用GetType()方法,它说它是MyClass (a, B或C)的集合。然而,在过滤上执行GetType()说它是MyBase的集合!
我需要它保持不变!
这导致了我的问题,因为我将过滤集合绑定到PivotControl
,现在无法看到MyClass
在过滤集合中需要的属性。
因为我们不知道集合中A, B或C是哪个类,我甚至尝试了这个:
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;
——或
return source.Where(s => s.SomeProperty == someVar).Cast<T>()'
}
但它仍然以同样的方式显示。
谢谢
我对你的问题真的很困惑,但我认为这都是关于Cast
扩展方法:
IEnumerable<MyClass> filtered = source.Where(s => s.SomeProperty = someVar).Cast<MyClass>();