Wie kann ich alle Klassen in einem Namespace in C # abrufen?
Wie kann ich alle Klassen in einem Namespace in C # abrufen?
Antworten:
Sie müssen es "rückwärts" machen; Listen Sie alle Typen in einer Assembly auf und überprüfen Sie dann den Namespace jedes Typs:
using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
return
assembly.GetTypes()
.Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
.ToArray();
}
Anwendungsbeispiel:
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
{
Console.WriteLine(typelist[i].Name);
}
Für alles, was vor .Net 2.0 Assembly.GetExecutingAssembly()
nicht verfügbar ist, benötigen Sie eine kleine Problemumgehung, um die Assembly zu erhalten:
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);
}
Sie müssen ein wenig mehr Informationen bereitstellen ...
Meinen Sie mit Reflection. Sie können ein Assembly-Manifest durchlaufen und mithilfe eine Liste der Typen abrufen
System.Reflection.Assembly myAssembly = Assembly.LoadFile("");
myAssembly.ManifestModule.FindTypes()
Wenn es sich nur um Visual Studio handelt, können Sie die Liste einfach im Intellisense-Fenster oder durch Öffnen des Objektbrowsers (STRG + W, J) abrufen.
Mit Reflection durchlaufen Sie alle Typen in einer Baugruppe. Ein Typ verfügt über eine Namespace-Eigenschaft, mit der Sie nur den Namespace filtern, an dem Sie interessiert sind.