Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why would typeof(Foo) ever return null?

Tags:

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

  • I can't provide a reproducible sample as this happens on a huge application
  • When I say 'occasionally' I mean in the same method in my application but during various instances. Also, when it fails once when running, it'll fail every time for that instance of the application.

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: enter image description here 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.


like image 520
Steve Dunn Avatar asked Jan 20 '11 10:01

Steve Dunn


People also ask

Why does typeof null return object?

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" .

Can Typeof return null?

The typeof operator returns "object" for objects, arrays, and null. The typeof operator does not return "object" for functions.


1 Answers

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.

like image 158
Massif Avatar answered Sep 19 '22 11:09

Massif