我列出了各种类型的实例(所有这些类型都源自超类型)。我需要得到一个仅包含某些类型或派生实例的子列表。一个简化的示例可以是:
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
的列表? 最佳答案
您的参数错误。 IsInstanceOfType需要一个实例作为参数,您在其中传递Type
。
以下应该工作。
if (typesToHave.Any(t => t.IsInstanceOfType(d)))