c#如何获取某一命名空间下的所有的类的信息(方法以及参数)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#如何获取某一命名空间下的所有的类的信息(方法以及参数)相关的知识,希望对你有一定的参考价值。
如果是当前下的。用Assembly.GetExecutingAssembly().GetTypes();如果是外部DLL,用Assembly.Load("namespace").GetTypes();
原理是反射,所以上面一定要加上using System.Reflection;
示例代码:
var classes = Assembly.Load("test").GetTypes();
foreach (var item in classes)
Console.WriteLine(item.Name);
注意的是,如果查看的对象是外部的DLL,一定要把DLL复制到项目的调试文件夹Debug下。 参考技术A 用反射
参考资料:http://blog.csdn.net/tonglian/article/details/2271066
在C#中获取命名空间中的类列表[重复]
【中文标题】在C#中获取命名空间中的类列表[重复]【英文标题】:Get list of classes in namespace in C# [duplicate] 【发布时间】:2010-12-22 13:58:19 【问题描述】:我需要以编程方式获取给定命名空间中所有类的List
。如何在 C# 中实现这一点(反射?)?
【问题讨论】:
当一个问题被标记为重复并且没有引用原始问题时,这是多么令人讨厌。 【参考方案1】:var theList = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace == "your.name.space")
.ToList();
【讨论】:
总是有“单行”。 ;-) 是的,你一定会喜欢单线的 :-) 这假定整个命名空间都在当前程序集中,充其量是部分解决方案。 战争,那么有什么更好的解决方案?【参考方案2】:看看这个How to get all classes within namespace?提供的答案返回一个Type[]数组,你可以轻松修改它以返回List
【讨论】:
【参考方案3】:没有 LINQ:
试试:
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);
【讨论】:
Assembly.GetExecutingAssembly().GetTypes().ToList() 会给你你想要的列表。 是的,格雷格,虽然从技术上讲,那是使用 LINQ 扩展方法,而我的示例旨在在没有 .NET 3.5 的情况下展示这一点 clean non linq example 虽然 OP 没有说程序集已经加载,所以代码可能返回一个空集,即使列表应该很长并且名称空间可能在更多程序集中: ) 公平点,我应该刚刚创建了一个带有 Assembly 参数作为输入的方法,并将客户端调用完全留给 OP。 ;-) 更多程序集中的相同命名空间不是我的设计方式。对于基本命名空间来说很好,但我绝对不会将同一命名空间中的类型分布在多个程序集中。太恶心了。【参考方案4】:我只能想到遍历组件中的类型以在正确的命名空间中找到它们
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;
【讨论】:
以上是关于c#如何获取某一命名空间下的所有的类的信息(方法以及参数)的主要内容,如果未能解决你的问题,请参考以下文章
背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口