Come posso ottenere tutte le classi all'interno di un namespace in C#?Come posso ottenere tutte le classi in uno spazio dei nomi?
risposta
Sarà necessario farlo "all'indietro"; elencare tutti i tipi in un assieme e poi controllando lo spazio dei nomi di ogni tipo:
using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
return
assembly.GetTypes()
.Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
.ToArray();
}
Esempio di utilizzo:
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
{
Console.WriteLine(typelist[i].Name);
}
Per nulla prima Net 2.0 dove Assembly.GetExecutingAssembly()
non è disponibile, è sarà necessario un piccolo rimedio per ottenere l'assemblea:
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);
}
.Where (t => String.Equals (t.Namespace, nameSpace, StringComparison.Ordinal) – abatishchev
Inoltre, mantieni attenzione all'assemblaggio! = spazio dei nomi: alcuni spazi dei nomi sono distribuiti su più assiemi. – Bevan
e perché non restituire solo un IEnumerable
Con Reflection si esegue il ciclo di tutti i tipi in un assieme. Un tipo ha una proprietà Namespace che si usa per filtrare solo lo spazio dei nomi che ti interessa.
Avrete bisogno di fornire un po 'più di informazioni ...
cosa si intende per utilizzando Reflection. È possibile scorrere un'assemblee Manifest e ottenere un elenco dei tipi di utilizzo
System.Reflection.Assembly myAssembly = Assembly.LoadFile("");
myAssembly.ManifestModule.FindTypes()
Se è solo in Visual Studio, si può solo ottenere l'elenco nella finestra di IntelliSense, o aprendo il Visualizzatore oggetti (CTRL + W , J)
possibile duplicato di [Estrarre tutte le classi di un nome specifico spazio] (http://stackoverflow.com/questions/343869/taking-out-all-all-classes-of-a-specific-namespace) – nawfal
Possibile duplicato di [Ottenere tutti i tipi in un namespace tramite riflessione] (https: // stackoverflow.com/questions/79693/getting-all-types-in-a-namespace-via-reflection) – Liam