簡體   English   中英

如何獲取C#中所有已加載類型的列表?

[英]How do I get a list of all loaded Types in C#?

我需要檢索從給定的程序集集加載的所有枚舉。

List<Type> list = new List<Type>();
foreach (Assembly ass in AppDomain.CurrentDomain.GetAssemblies())
{
    foreach (Type t in ass.GetExportedTypes())
    {
        if (t.IsEnum)
        {
            list.Add(t);
        }
    }
}

對於當前Appdomain加載的所有程序集,應該只從已定義的程序集中獲取,只需調整;-)

這是一個更實用的解決方案:

AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(a => a.GetTypes())
    .Where(t => t.IsEnum)

假設您有要檢查的Assembly對象列表:

IEnumerable<Assembly> assemblies; // assign the assemblies you want to check here

foreach (Assembly a in assemblies) {
    foreach (Type t in assembly.GetTypes()) {
        if (t.IsEnum) {
            // found an enum! Do whatever...
        }
    }
}

您應該能夠使用Assembly.GetTypes()來獲取程序集的所有類型。 對於每種類型,您可以使用Type.IsEnum屬性來查看它是否為枚舉。

您還可以使用LINQ從程序集列表中返回所有枚舉類型的列表。

IEnumerable<Assembly> assemblies;
// give assemblies some value
var enums = from assembly in assemblies let types = assembly.GetTypes() from type in types where type.IsEnum select type;

enums將是IEnumerable類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM