gpt4 book ai didi

c# - 如何返回 System.Collections 程序集中的命名空间列表?

转载 作者:行者123 更新时间:2023-11-30 17:58:17 24 4
gpt4 key购买 nike

当为 System.Collections 调用时,此代码不返回任何命名空间。

public static List<string> GetAssemblyNamespaces(AssemblyName asmName)
{
List<string> namespaces = new List<string>();
Assembly asm = Assembly.Load(asmName);

foreach (Type typ in asm.GetTypes())
if (typ.Namespace != null)
if (!namespaces.Contains(typ.Namespace))
namespaces.Add(typ.Namespace);

return namespaces;
}

这是为什么呢? System.Collections 中有类型。我可以做些什么来获取命名空间?

最佳答案

不同的程序集可能包含相同(或子)的命名空间。例如,A.dll 可能包含命名空间 A,而 B.dll 可能包含 A.B。因此您必须加载所有 程序集才能找到命名空间。

这或许可以解决问题,但它仍然存在命名空间可能位于未引用、未使用的程序集中的问题。

var assemblies = new List<AssemblyName>(Assembly.GetEntryAssembly().GetReferencedAssemblies());
assemblies.Add(Assembly.GetEntryAssembly().GetName());

var nss = assemblies.Select(name => Assembly.Load(name))
.SelectMany(asm => asm.GetTypes())
.Where(type=>type.Namespace!=null)
.Where(type=>type.Namespace.StartsWith("System.Collections"))
.Select(type=>type.Namespace)
.Distinct()
.ToList();

例如,如果您运行上面的代码,您将不会得到 System.Collections.MyCollections,因为它是在我的测试代码 SO.exe 中定义的:)

关于c# - 如何返回 System.Collections 程序集中的命名空间列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12448390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com