Occasionally, I see that typeof(Foo)
returns null. Why would this happen?
This is in C#, .NET 3.5.
I thought it might have something to do with the assembly containing the type not yet being loaded, but a test app shows that the assembly is loaded at the start of the method where typeof
is used.
Any ideas?
Update 1
Update 2
The application in question uses a huuuuuge amount of memory and runs on 32bit XP. I'm thinking maybe it's a TypeLoadException or OutOfMemoryException that's somehow being swallowed (but I can't see how, as I've tried this with first-chance exceptions turned on in the debugger).
Update 3
Ran into the same issue just now. Here's the stack trace: The code up to this point is literally just:
Type tradeType = typeof(MyTradeType) TradeFactory.CreateTrade(tradeType)
(before, it was ..CreateTrade(typeof(MyTradeType))
so I couldn't actually tell if the typeof
returned null)
So, it looks like typeof()
isn't returning null but it's getting set to null by the time it ends up in the CreateTrade
method.
The exception (NullReferenceException
) has a HResult
property of 0x80004003
(Invalid pointer
). A call to System.Runtime.InteropServices.Marshal.GetLastWin32Error( )
(in the Immediate Window) returns 127 (The specified procedure could not be found)
. I've looked in the Modules window and the module that contains this type and method has been loaded and there doesn't look to be any loader errors.
The reasoning behind this is that null , in contrast with undefined , was (and still is) often used where objects appear. In other words, null is often used to signify an empty reference to an object. When Brendan Eich created JavaScript, he followed the same paradigm, and it made sense (arguably) to return "object" .
The typeof operator returns "object" for objects, arrays, and null. The typeof operator does not return "object" for functions.
Has loading the dll failed for some reason? Have you checked the fusion logs.
I'd assume this would cause more problems than just this, but if you're doing this check before using anything from the assembly, it may be hiding any further problems.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With