Assmbly.GetTpes()獲取程序集中的類型,但如果我也想要嵌套類(OrderLine),我該怎麼做?我只知道程序集的名稱,而不是類名,所以GetType(Order + OrderLine)將不起作用。Assembly.GetTypes()嵌套類
public class Order
{
public class OrderLine
{
}
}
Assmbly.GetTpes()獲取程序集中的類型,但如果我也想要嵌套類(OrderLine),我該怎麼做?我只知道程序集的名稱,而不是類名,所以GetType(Order + OrderLine)將不起作用。Assembly.GetTypes()嵌套類
public class Order
{
public class OrderLine
{
}
}
我不知道是否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
類型返回。
這不會在嵌套類型中選擇嵌套類型。但是,真的,這是誰? – 2010-06-21 18:45:49
@Stefan - 檢測嵌套嵌套嵌套類型是一個遞歸練習,留給讀者 – Greg 2010-06-21 18:51:29
您可以使用LINQ語句。我不是100%確定你想要做什麼,但你可以做這樣的事情。
Assembly.GetTypes().Where(type => type.IsSubclassOf(SomeType) && type.Whatever);
編輯
如果正常Assembly.GetTypes()
沒有返回您的嵌套類,你可以迭代這個數組,並添加你找到數組的一切。像
var allTypes = new List<Type>();
var types = Assembly.GetTypes();
allTypes.AddRange(types);
foreach(var type in types)
{
allTypes.AddRange(type.GetNestedTypes());
}
嵌套類不一定是子類,子類不一定是嵌套的。這不符合提問者的要求。 – Greg 2010-06-21 18:28:22
@Greg我只是演示了一個LINQ語句的例子。 – 2010-06-21 18:33:04
事情是這樣的:
Assembly.GetTypes().SelectMany(t => new [] { t }.Concat(t.GetNestedTypes()));
哦,SelectMany。 *趕往MSDN吸收信息* – 2010-06-21 18:36:35
只是好奇,你最終在'assembly.GetTypes()'中找到嵌套類型,還是隻通過調用'type.GetNestedTypes()'找到? – Greg 2010-06-22 05:29:30