gpt4 book ai didi

c# - 如何从指定的命名空间 c# 中获取每个类?

转载 作者:行者123 更新时间:2023-12-04 16:56:05 26 4
gpt4 key购买 nike

所以我已经阅读了一些类似的问题,但这些问题的答案实际上并没有给我一个结果。

我现在的代码是

List<Type> theList = Assembly.GetExecutingAssembly().GetTypes().ToList().Where(t => t.Namespace == "foo.test").ToList();

这实际上并没有返回任何东西,即使在这个命名空间中有多个类。 foo.test 中包含三个静态类,分别是 TestOne、TestTwo 和 TestThree;但是在我从另一个堆栈溢出线程获得的小衬垫中没有返回任何内容。

如何仅在给定命名空间 foo.test 的情况下获取这三个静态类?我的程序命名空间是 foo.program,所以我们两个命名空间都有些接近,而且我的程序包含一个 using foo.test。

最佳答案

您可能会遇到区分大小写和 namespace 名称不完整的问题。您最好将不区分大小写的搜索与 IndexOf() 结合使用。对于您当前的文化。

List<Type> theList = Assembly.GetExecutingAssembly().GetTypes().Where(t => 
culture.CompareInfo.IndexOf(t.Namespace, "foo.test", CompareOptions.IgnoreCase))
.ToList();

或者,如果您确定您的命名空间是正确的,则可以对该命名空间执行不区分大小写的搜索。
List<Type> theList = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace.Equals("foo.test", StringComparison.CurrentCultureIgnoreCase))
.ToList();

最后,值得注意的是,这只会从正在执行的程序集中加载类型!如果类型存在于外部程序集中,则此代码将不会检索它们!如果您之前在代码中引用了该类,强制将其加载到应用程序域中,则可以遍历所有加载的程序集以查找您的类型。
List<Type> theList = new List<Type>();
foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
theList.AddRange(
a.GetTypes()
.Where(t =>
t.Namespace.Equals("foo.test", StringComparison.CurrentCultureIgnoreCase))
.ToList());
}

关于c# - 如何从指定的命名空间 c# 中获取每个类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30536211/

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