C#/.NET应用程序编程开发中如何使用反射获取指定命名空间中的所有类(类名)的集合?

C#开发 作者: Rector 55 次阅读 · 读完约需 1 分钟 收藏本文

郑重申明:本文未经许可,禁止任何形式转载

问题描述

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();

阅读了该文章的人还浏览了...

本文永久链接码友网 » C#/.NET应用程序编程开发中如何使用反射获取指定命名空间中的所有类(类名)的集合?

发布于: 2019-07-18 10:10:23
分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册