是否可以使用linq将基类中的所有派生对象添加到数组中

本文关键字:派生 对象 添加 数组 可以使 linq 基类 是否 | 更新日期: 2023-09-27 18:29:38

假设我有

class Foo
{
}
class Foo_Child : Foo
{
}
class FooBar : Foo
{
}

在C++中,我会在外部的某个地方创建一个Vector,并且必须单独添加继承的类。我最近开始学习C#和linq,我想知道是否有可能实现以下内容:

通过汇编,如果类是从foo继承的,则将其添加到列表中

而不是一个接一个地添加它们。如果是,你是怎么做的?

是否可以使用linq将基类中的所有派生对象添加到数组中

是的,这可以使用反射来实现。

通过汇编,如果类是从foo继承的,则将其添加到列表中

// First get the assembly
// In this example we load the currently executing assembly but
// you can load any assembly you would need
var assembly = Assembly.GetExecutingAssembly();
// Then you could use the GetTypes method to get all types from
// this assembly and then filter with LINQ
List<Type> derived = assembly
    .GetTypes()
    .Where(t => t != typeof(Foo)) // we don't want Foo itself
    .Where(t => typeof(Foo).IsAssignableFrom(t)) // we want all types that are assignable to Foo
    .ToList();
// at this stage derived will contain the Foo_Child and FooBar types