基类和派生类的混淆

本文关键字:派生 基类 | 更新日期: 2023-09-27 18:09:09

基本情况如下:

class MyBase {}
class MyClassA : MyBase {}
class MyClassB : MyBase {}
class MyClassC : MyBase {}

我有一个MyBaseIEnumerable集合称为source,它实际上包含MyClassA, MyClassBMyClassC项的集合。总是只有一个或另一个。

我现在想要创建该集合的过滤副本,所以我执行类似的操作:

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>();