为什么typeof(Foo)会返回null?

Ste*_*unn 23 .net c#

偶尔,我看到typeof(Foo)返回null.为什么会这样?

这是在C#,.NET 3.5中.

我认为它可能与包含尚未加载的类型的程序集有关,但测试应用程序显示程序集在使用的方法的开头加载typeof.

有任何想法吗?


更新1

  • 我不能提供可重复的样本,因为这在大型应用程序中发生
  • 当我说'偶尔'时,我的意思是在我的应用程序中使用相同的方法,但在各种情况下.此外,当它在运行时失败一次时,它每次都会失败,因为该应用程序的实例.

更新2

有问题的应用程序使用huuuuuge内存量并在32位XP上运行.我想也许它是一个TypeLoadException或OutOfMemoryException,它以某种方式被吞下(但我看不出如何,因为我已经尝试过在调试器中启用了第一次机会异常).


更新3

刚才遇到同样的问题.这是堆栈跟踪: 在此输入图像描述 到目前为止的代码实际上只是:

Type tradeType = typeof(MyTradeType)
TradeFactory.CreateTrade(tradeType)
Run Code Online (Sandbox Code Playgroud)

(之前,它是..CreateTrade(typeof(MyTradeType))如此我实际上无法判断typeof返回的null是否存在)

因此,看起来typeof()它不会返回null但是它CreateTrade方法结束时被设置为null.

exception(NullReferenceException)的HResult属性为0x80004003(Invalid pointer).对System.Runtime.InteropServices.Marshal.GetLastWin32Error( )(在立即窗口中)的调用返回127 (The specified procedure could not be found).我查看了模块窗口,并且已经加载了包含此类型和方法的模块,并且看起来没有任何加载器错误.


Hen*_*man 2

由于typeof(T) 是编译时运算符,因此不会涉及程序集的加载时间。

看到一些演示这一点的代码会很有趣。

更有趣的是看到它有时发生有时不发生。

第一个答案可能是:GetType()在实例上使用。