Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 嵌套类的Assembly.GetTypes()_C#_Reflection - Fatal编程技术网

C# 嵌套类的Assembly.GetTypes()

C# 嵌套类的Assembly.GetTypes(),c#,reflection,C#,Reflection,GetTpes()获取程序集中的类型,但是如果我还需要嵌套类(OrderLine),我该如何做呢?我只知道程序集的名称,而不知道类名,因此GetType(Order+OrderLine)将无法工作 public class Order { public class OrderLine { } } 您可以使用LINQ语句。我不是百分之百确定你想做什么,但你可以这样做 Assembly.GetTypes().Where(type => type.IsSubclassOf(Some

GetTpes()获取程序集中的类型,但是如果我还需要嵌套类(OrderLine),我该如何做呢?我只知道程序集的名称,而不知道类名,因此GetType(Order+OrderLine)将无法工作

public class Order
{
  public class OrderLine
  {
  }
}

您可以使用LINQ语句。我不是百分之百确定你想做什么,但你可以这样做

Assembly.GetTypes().Where(type => type.IsSubclassOf(SomeType) && type.Whatever);
编辑

如果正常的
Assembly.GetTypes()
没有返回嵌套类,则可以迭代数组,并将在
CurrentType.GetNestedTypes()中找到的所有内容添加到数组中。像

 var allTypes = new List<Type>();
 var types = Assembly.GetTypes();
 allTypes.AddRange(types);
 foreach(var type in types)
 {
     allTypes.AddRange(type.GetNestedTypes());
 }
var allTypes=new List();
var types=Assembly.GetTypes();
allTypes.AddRange(类型);
foreach(类型中的变量类型)
{
allTypes.AddRange(type.GetNestedTypes());
}
类似这样的内容:


Assembly.GetTypes().SelectMany(t => new [] { t }.Concat(t.GetNestedTypes()));

我不知道
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;
        }
    }
}
IEnumerable所有类型(程序集)
{
foreach(在assembly.GetTypes()中键入Type)
{
收益型;
foreach(在Type.GetNestedTypes()中键入nestedType)
{
收益嵌套型;
}
}
}
编辑:
关于
Assembly.GetTypes的说明

返回的数组包含嵌套类型


所以我的上述答案其实是没有必要的。您应该发现
Order
Order+OrderLine
都是由
Assembly作为类型返回的。GetTypes

嵌套类不一定是子类,子类也不一定是嵌套的。这不符合提问者的要求。@Greg我只是演示了一个LINQ语句的示例。哦,SelectMany。冲向MSDN以吸收信息这不会在嵌套类型中拾取嵌套类型。但是真的,是谁做的?@Stefan-检测嵌套类型是递归中留给读者的一个练习。好奇的是,您最终是在
assembly.GetTypes()
中找到了嵌套类型,还是只通过调用
type.GetNestedTypes()
找到了它们?