Assmbly.GetTpes()获取程序集中的类型,但如果我还想要嵌套类(OrderLine),我该怎么做?我只知道程序集的名称,而不是类名,因此GetType(Order + OrderLine)不起作用。
public class Order
{
public class OrderLine
{
}
}
答案 0 :(得分:7)
我不知道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;
}
}
}
修改强>
MSDN has the following关于Assembly.GetTypes
返回的数组包含嵌套类型。
所以我的上述答案确实没有必要。您应该会Order
找到Order+OrderLine
和Assembly.GetTypes
作为类型返回的内容。
答案 1 :(得分:4)
这样的事情:
Assembly.GetTypes().SelectMany(t => new [] { t }.Concat(t.GetNestedTypes()));
答案 2 :(得分:0)
您可以使用LINQ语句。我不是100%确定你要做什么,但你可以做这样的事情。
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());
}