0

假设我们有一个基类 A 和 2 个派生类 B 和 C。如果我想查询以字符串形式给出的某种类型的实例,我该怎么做?

我想写:

var q = A.OfType<t == "B" ? B : C>()

但这不会编译,我真的不想写两个不同的查询:

var q;
if (t == "A") q = A.OfType<B>();
else q = A.OfType<C>();

建议任何人?

4

2 回答 2

1

我想出的最接近的事情是:

var q = a.Where(e => (t == "B" && e is B) || (t != "B" && e is C));

另一种可能性,部分由 jods 在评论中提出:

var q = t == "B"
        ? ((IEnumerable<A>)a.OfType<B>())
        : ((IEnumerable<A>)a.OfType<C>());

但是,在这两种情况下,结果都是类型<A>,因为您不能让函数的返回类型取决于运行时条件,因为它必须在编译时确定。

于 2013-10-09T23:45:48.093 回答
-1

不完全是你想要的,但三元运算符 (?:) 是一个美丽的东西,

var q = (t=="B") ? A.OfType<B>() : A.OfType<C>() ;

(请参阅如何在 c# 中为此语句使用三元运算符

于 2013-10-09T23:49:37.863 回答