>>>
>>>My version returns a list Modules each containing a list of Classes. You'd need something like:
List<IEnumerable<Type>> list =
>>> (from m in Assembly.Load(Assemblyname).GetModules() select m.GetTypes().Where(x => x.IsClass)).ToList();
>>>
>>>foreach ( IEnumerable<Type> t in list)
>>> {
>>> foreach (Type className in t)
>>> {
>>> Console.WriteLine("{0}", className.FullName);
>>> }
>>> }
>>
>>
>>Yes, I figured that out - see other message with AddRange() in GetModInfo()
>
>Oddly AddRange() was my first idea for modifying your original code:
public static List<Type> GetAssemblyClasses(string assemblyName)
> {
> var assembly = Assembly.Load(assemblyName);
> List<Type> classList = new List<Type>();
>
> foreach (var module in assembly.GetModules())
> {
> classList.AddRange(from x in module.GetTypes().Where(x => x.IsClass) select x);
> }
> return classList;
> }
Or without linq
public static List<Type> GetAssemblyClasses(string assemblyName)
{
var assembly = Assembly.Load(assemblyName);
List<Type> classList = new List<Type>();
foreach (var module in assembly.GetModules())
{
classList.AddRange(module.FindTypes(new TypeFilter(delegate(Type t, object o) { return t.IsClass; }), null));
}
return classList;
}
Gregory