有时,我看到typeof(Foo)
返回null。为什么会发生这种事?
这是在C#,.NET 3.5中。
我认为这可能与包含尚未加载的类型的程序集有关,但是一个测试应用程序显示,程序集是在使用typeof
的方法开始时加载的。
有什么想法吗?
更新1
更新2
该应用程序使用了大量的内存,并运行在32位XP上。我在想,也许是一个TypeLoadException或OutOfMemoryException被吞没了(但我不知道是怎么做的,因为我在调试器中打开了一次机会异常)。
更新3
刚才也碰到了同样的问题。下面是堆栈跟踪:
到目前为止,代码实际上只是:
Type tradeType = typeof(MyTradeType)
TradeFactory.CreateTrade(tradeType)
(在此之前,是..CreateTrade(typeof(MyTradeType))
,所以实际上无法判断是否返回空__)
因此,看起来typeof()
没有返回空,但是当它在 CreateTrade
方法中结束时,被设置为null。
异常(NullReferenceException
)的HResult
属性为0x80004003
(Invalid pointer
)。对System.Runtime.InteropServices.Marshal.GetLastWin32Error( )
的调用(在立即窗口中)返回127 (The specified procedure could not be found)
。我已经查看了Modules窗口,包含此类型和方法的模块已经加载,并且没有任何加载程序错误。
发布于 2011-01-20 02:31:19
加载dll是否因某种原因而失败?你查过融合日志了吗。
我认为这会导致更多的问题,但如果您在使用程序集中的任何内容之前执行此检查,则可能会隐藏任何进一步的问题。
发布于 2011-01-20 02:26:26
因为typeof(T)
是编译时操作符,所以不会涉及程序集的加载时间。
看到一些演示这一点的代码会很有趣。
更有趣的是,它有时发生,有时却不发生。
第一个答案可能是:在实例上使用GetType()
。
发布于 2011-01-20 02:56:02
类型在编译期间确定类型。因此,即使它返回null,也应该始终返回null。因为在运行时行为不会改变。给一些代码片段,其他一些东西坏了。
https://stackoverflow.com/questions/4745853
复制相似问题