【发布时间】:2014-10-24 08:34:43
【问题描述】:
我有一个各种类型的实例列表(所有这些类型都派生自超类型)。我需要获取一个子列表,其中仅包含某些类型或派生的实例。一个简化的例子可以是:
class Program
{
private class A { }
private class B : A { }
private class C : A { }
private class D : C { }
static void Main(string[] args)
{
B b = new B();
C c = new C();
D d = new D();
var typesToHave = new List<Type>();
typesToHave.Add(typeof(C));
var result = new List<A>();
if (typesToHave.Any(t => b.GetType().IsInstanceOfType(t)))
result.Add(b);
if (typesToHave.Any(t => c.GetType().IsInstanceOfType(t)))
result.Add(c);
if (typesToHave.Any(t => d.GetType().IsInstanceOfType(t)))
result.Add(d);
}
}
我希望这里有一个包含 c 和 d 的列表,但它什么也没返回。
另外(但它是次要的)我不知道为什么我不能在 lambda 表达式中使用 is 或 as 运算符,例如:
if (typesToHave.Any(t => d is t))
在上面的示例中,我怎样才能有一个包含c 和d 的列表?
【问题讨论】:
标签: c# .net reflection types comparison