Assembly.GetTypes()用于嵌套类

Mar*_*son 8 c# reflection

Assmbly.GetTpes()获取程序集中的类型,但如果我还想要嵌套类(OrderLine),我该怎么做?我只知道程序集的名称,而不是类名,因此GetType(Order + OrderLine)不起作用.

public class Order
{
  public class OrderLine
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 8

我不知道是否assembly.GetTypes()应该包含嵌套类.假设它没有,像下面这样的方法可以迭代所有程序集的类型.

IEnumerable<Type> AllTypes(Assembly assembly)
{
    foreach (Type type in assembly.GetTypes())
    {
        yield return type;        
        foreach (Type nestedType in type.GetNestedTypes())
        {
            yield return nestedType;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:
MSDN有如下说明Assembly.GetTypes

返回的数组包含嵌套类型.

所以我的上述答案真的不是必要的.您应该找到两者Order并按Order+OrderLine类型返回Assembly.GetTypes.

  • @Stefan - 检测嵌套嵌套嵌套类型是一种留给读者的递归练习 (2认同)

STO*_*STO 5

像这样的东西:


Assembly.GetTypes().SelectMany(t => new [] { t }.Concat(t.GetNestedTypes()));
Run Code Online (Sandbox Code Playgroud)