You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:30:57