web-dev-qa-db-fra.com

Comment puis-je obtenir toutes les classes dans un espace de noms?

Comment puis-je obtenir toutes les classes dans un espace de noms en C #?

70
Micheal sonnal

Vous devrez le faire "à l'envers"; répertoriez tous les types dans un assembly, puis vérifiez l'espace de noms de chaque type:

using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
    return 
      Assembly.GetTypes()
              .Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
              .ToArray();
}

Exemple d'utilisation:

Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
{
    Console.WriteLine(typelist[i].Name);
}

Pour tout ce qui précède .Net 2.0 où Assembly.GetExecutingAssembly() n'est pas disponible, vous aurez besoin d'une petite solution pour obtenir l'assembly:

Assembly myAssembly = typeof(<Namespace>.<someClass>).GetTypeInfo().Assembly;
Type[] typelist = GetTypesInNamespace(myAssembly, "<Namespace>");
for (int i = 0; i < typelist.Length; i++)
{
    Console.WriteLine(typelist[i].Name);
}
129
Fredrik Mörk

Vous devrez fournir un peu plus d'informations ...

Voulez-vous dire en utilisant la réflexion. Vous pouvez parcourir un manifeste d'assemblys et obtenir une liste de types à l'aide de

   System.Reflection.Assembly myAssembly = Assembly.LoadFile("");

   myAssembly.ManifestModule.FindTypes()

Si c'est juste dans Visual Studio, vous pouvez simplement obtenir la liste dans la fenêtre intellisense, ou en ouvrant l'Explorateur d'objets (CTRL + W, J)

5
Eoin Campbell

Avec Reflection, vous pouvez parcourir tous les types d'un assemblage. Un type possède une propriété Namespace que vous utilisez pour filtrer uniquement l'espace de noms qui vous intéresse.

0
Gerrie Schenck