C#程序集中哪些类型不属于命名空间?解决空引用警告疑问
程序集中无命名空间的类型说明
先看你提供的这段C#代码:
Console.WriteLine("Please choose a method to obtain a table:"); Type[] current = Assembly.GetExecutingAssembly().GetTypes(); for(int i = 0, j = 1; i < current.Length; i++) { if (current[i].IsClass && current[i].Namespace.Contains("parser", StringComparison.InvariantCultureIgnoreCase) && current[i].Name.Contains("parser", StringComparison.InvariantCultureIgnoreCase)) { Console.WriteLine("{0}.{1}", j, current[i].Name); j++; } }
代码里current[i].Namespace触发空引用警告,是因为确实存在一些类型的Namespace属性会返回null,这类类型主要有以下几种:
- 未显式声明命名空间的类型:在C#里,如果你写类的时候没把它放到
namespace { ... }块里,这个类就属于全局命名空间,此时它的Namespace属性就是null。比如直接写public class TestClass { },没有包裹任何命名空间,就会出现这种情况。 - IL层面定义的无命名空间类型:C#编译器不允许定义无命名空间的类型,但通过IL汇编、反射Emit动态生成的类型,或者某些非C#语言编写的程序集里,可能存在不属于任何命名空间的类型。
- 极少数系统内部特殊类型:.NET基础库中存在极个别系统级内部类型没有命名空间,但这类类型几乎不会在业务代码中被遍历到。
另外,要解决你代码里的空引用警告,只需要给Namespace加个null判断就行,修改后的条件如下:
if (current[i].IsClass && current[i].Namespace != null && current[i].Namespace.Contains("parser", StringComparison.InvariantCultureIgnoreCase) && current[i].Name.Contains("parser", StringComparison.InvariantCultureIgnoreCase))
内容的提问来源于stack exchange,提问作者Humble Newbie
相关产品推荐
相关产品推荐

