问题描述
C#/.NET应用程序编程开发中,如何使用反射获取指定命名空间中的所有类(类名)的集合呢?
方案一
使用LINQ从Assembly.GetExecutingAssembly().GetTypes()
的所有类型集合中筛选,如下:
string nspace = "...";
var q = from t in Assembly.GetExecutingAssembly().GetTypes()
where t.IsClass && t.Namespace == nspace
select t;
q.ToList().ForEach(t => Console.WriteLine(t.Name));
方案二
如果不使用LINQ,则可以使用循环来读取指定命名空间的所有类型,如下:
using System.Reflection;
using System.Collections.Generic;
//...
static List<string> GetClasses(string nameSpace)
{
Assembly asm = Assembly.GetExecutingAssembly();
List<string> namespacelist = new List<string>();
List<string> classlist = new List<string>();
foreach (Type type in asm.GetTypes())
{
if (type.Namespace == nameSpace)
namespacelist.Add(type.Name);
}
foreach (string classname in namespacelist)
classlist.Add(classname);
return classlist;
}
方案三
对于要读取特定的程序集,命名空间和类名,如下:
var assemblyName = "Some.Assembly.Name" //程序集
var nameSpace = "Some.Namespace.Name"; //命名空间
var className = "ClassNameFilter"; // 类名
var asm = Assembly.Load(assemblyName);
var classes = asm.GetTypes().Where(p =>
p.Namespace == nameSpace &&
p.Name.Contains(className)
).ToList();
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册