【发布时间】:2013-11-28 00:49:50
【问题描述】:
我有一个基类
public Enum TestType{
A,
B
}
public abstract class Base{
public int ID{ get;set;}
}
还有一个派生类
public class Derived1 : Base{
public string Prop1 {get;set;}
}
public class Derived2 : Base{
public string Prop2 {get;set;}
}
然后我有一个返回 Base 的函数
public IQueryable<Base> GetData(TestType type){
switch(type){
case A:
return new IQueryable<Derived1>();
case B:
return new IQueryable<Derived2>();
}
}
遗憾的是,我正在使用的其中一个工具需要实际类型,并且无法通过传递基本类型。
如何将 GetData 的返回结果转换为它的实际类型而不是 Base。我正在考虑使用表达式和演员,但我无法弄清楚。
理想情况下,GetData 是一个获取数据的工厂,我不希望 IQueryable
编辑:添加了一些底层代码来提供帮助。现在我正在使用的控件说它在 base 上找不到属性 Prop1(如果我传入返回 IQueryable 的 GetData 结果集),但如果我转换它,它工作正常。问题是我在编译时不知道确切的类型我只知道其中一个类会在那里。
【问题讨论】:
-
我不认为你可以在不实际施放的情况下逃脱。您希望如何拥有一个包含混合项目的列表?
-
不会有混合项目
-
@dbarnes 能否请您在
IQueryable<Base> GetData()中输入一些代码来帮助演示如何返回不同的数据类型?如果您不想要一堆 if 语句,我们需要查看数据如何生成的逻辑,因为类似的逻辑需要进入强制转换。 -
好吧,我又添加了一些代码