15

I need to programmatically get a List of all the classes in a given namespace. How can I achieve this (reflection?) in C#?

John Rudy
  • 37,282
  • 14
  • 64
  • 100
AndreyAkinshin
  • 18,603
  • 29
  • 96
  • 155
  • How annoying when a question gets marked as a duplicate and the original is not referenced. – War Nov 09 '14 at 15:06

4 Answers4

39
var theList = Assembly.GetExecutingAssembly().GetTypes()
                      .Where(t => t.Namespace == "your.name.space")
                      .ToList();
Wai Ha Lee
  • 8,598
  • 83
  • 57
  • 92
Klaus Byskov Pedersen
  • 117,245
  • 29
  • 183
  • 222
5

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
  • 11,998
  • 1
  • 34
  • 57
  • Assembly.GetExecutingAssembly().GetTypes().ToList() will give you the list you want. – Gregory Dec 02 '09 at 20:51
  • 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 Dec 02 '09 at 20:55
  • 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 Dec 02 '09 at 21:06
  • 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 Dec 02 '09 at 21:43
  • 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 Dec 02 '09 at 21:45
2

Take a look at this How to get all classes within namespace? the answer provided returns an array of Type[] you can modify this easily to return List

Community
  • 1
  • 1
1

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
  • 6,081
  • 1
  • 26
  • 39