I need to programmatically get a List
of all the classes in a given namespace. How can I achieve this (reflection?) in C#?
views:
277answers:
5
+4
A:
Without LINQ:
Try:
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
List<Type> myTypes = new List<Type>();
foreach (Type t in types)
{
if (t.Namespace=="My.Fancy.Namespace")
myTypes.Add(t);
}
Wim Hollebrandse
2009-12-02 20:45:06
Assembly.GetExecutingAssembly().GetTypes().ToList() will give you the list you want.
Gregory
2009-12-02 20:51:57
Yes Greg, though technically, that is using a LINQ extension method and my example was meant to show this without having .NET 3.5
Wim Hollebrandse
2009-12-02 20:55:42
clean non linq example though OP doesn't say that the assembly has already been loaded so the code might return an empty set eventhough the list should have been long and a name space might be in more assemblies :)
Rune FS
2009-12-02 21:06:20
Fair point, I should have just created a method with an Assembly parameter as input and left the client call up to the OP altogether. ;-)
Wim Hollebrandse
2009-12-02 21:43:20
Same namespaces in more assemblies is not how I would design it. Fine for base namespaces, but I definitely wouldn't have types in the same namespaces spread out over multiple assemblies. That's nasty.
Wim Hollebrandse
2009-12-02 21:45:36
+1
A:
Take a look at this http://stackoverflow.com/questions/949246/how-to-get-all-classes-within-namespace the answer provided returns an array of Type[] you can modify this easily to return List
Alan
2009-12-02 20:50:11
+1
A:
I can only think of looping through types in an assebly to find ones iin the correct namespace
public List<Type> GetList()
{
List<Type> types = new List<Type>();
var assembly = Assembly.GetExecutingAssembly();
foreach (var type in assembly .GetTypes())
{
if (type.Namespace == "Namespace")
{
types.Add(type);
}
}
return types;
}
Pharabus
2009-12-02 20:50:20
+5
A:
var theList = Assembly.GetExecutingAssembly().GetTypes().ToList().Where(t => t.Namespace == "your.name.space").ToList();
klausbyskov
2009-12-02 20:50:25