在C#中获取命名空间中的类列表[重复]
Posted
技术标签:
【中文标题】在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#中获取命名空间中的类列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章