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

C#通过反射获取不同命名空间下的类(属性和方法)

如何获取命名空间中的所有类?

c#如何获取某一命名空间下的所有的类的信息(方法以及参数)

如何获取命名空间中的所有类?

C#中的命名空间和程序集

在 C# 中的命名空间之前或之后使用语句 [重复]