如何从指定的命名空间c#中获取每个类
本文关键字:获取 命名空间 | 更新日期: 2023-09-27 17:51:06
所以我读了一些类似的问题,但这些问题的答案实际上并没有给我一个结果。
我现在的代码是
List<Type> theList = Assembly.GetExecutingAssembly().GetTypes().ToList().Where(t => t.Namespace == "foo.test").ToList();
这实际上不返回任何东西,即使在这个命名空间中有多个类。foo中有三个静态类。teststone, TestTwo,和TestThree;但是在我从另一个堆栈溢出线程得到的小一行中没有返回。
我如何获取这三个静态类只给定名称空间foo.test?我的程序命名空间是foo。程序,所以我们的两个名称空间有点接近,我也有一个using foo。
您可能会遇到大小写敏感和名称空间名称不完整的问题。对于当前的区域性,您最好使用不区分大小写的搜索并结合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();
最后,值得注意的是,这只会从执行程序集中加载类型!如果类型存在于外部程序集中,这段代码将不会检索它们!如果你之前在代码中引用了这个类,强迫它被加载到app域中,你可以遍历所有加载的程序集来查找你的类型。
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());
}
如果这些类型在不同的程序集中定义,或者foo.test
实际上应该大写,则会发生这种情况。