Jak mogę uzyskać wszystkie klasy w przestrzeni nazw w języku C #?
Jak mogę uzyskać wszystkie klasy w przestrzeni nazw w języku C #?
Odpowiedzi:
Będziesz musiał to zrobić „wstecz”; wypisz wszystkie typy w zestawie, a następnie sprawdź przestrzeń nazw każdego typu:
using System.Reflection;
private Type[] GetTypesInNamespace(Assembly assembly, string nameSpace)
{
return
assembly.GetTypes()
.Where(t => String.Equals(t.Namespace, nameSpace, StringComparison.Ordinal))
.ToArray();
}
Przykład użycia:
Type[] typelist = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "MyNamespace");
for (int i = 0; i < typelist.Length; i++)
{
Console.WriteLine(typelist[i].Name);
}
W przypadku czegokolwiek wcześniejszego niż .Net 2.0, gdzie Assembly.GetExecutingAssembly()
nie jest dostępny, będziesz potrzebować małego obejścia, aby uzyskać zestaw:
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);
}
Musisz podać trochę więcej informacji ...
Czy masz na myśli użycie Reflection. Możesz iterować przez Manifest zestawów i uzyskać listę typów przy użyciu
System.Reflection.Assembly myAssembly = Assembly.LoadFile("");
myAssembly.ManifestModule.FindTypes()
Jeśli jest tylko w Visual Studio, możesz po prostu pobrać listę w oknie Intellisense lub otwierając przeglądarkę obiektów (CTRL + W, J)
Dzięki Reflection możesz przeglądać wszystkie typy w złożeniu. Typ ma właściwość Namespace, której używasz do filtrowania tylko interesującej Cię przestrzeni nazw.