C# 嵌套类的Assembly.GetTypes()
GetTpes()获取程序集中的类型,但是如果我还需要嵌套类(OrderLine),我该如何做呢?我只知道程序集的名称,而不知道类名,因此GetType(Order+OrderLine)将无法工作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
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()
找到了它们?