偶尔,我看到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)
.我查看了模块窗口,并且已经加载了包含此类型和方法的模块,并且看起来没有任何加载器错误.
由于typeof(T)
是编译时运算符,因此不会涉及程序集的加载时间。
看到一些演示这一点的代码会很有趣。
更有趣的是看到它有时发生有时不发生。
第一个答案可能是:GetType()
在实例上使用。