Ocasionalmente, veo que typeof(Foo)
devuelve nulo. ¿Por qué sucedería esto?¿Por qué typeof (Foo) alguna vez devolvería nulo?
Esto está en C#, .NET 3.5.
Pensé que podría tener algo que ver con el ensamblaje que contiene el tipo que aún no se está cargando, pero una aplicación de prueba muestra que el ensamblaje se carga al inicio del método donde se usa typeof
.
¿Alguna idea?
Actualización 1
- no puedo proporcionar una muestra reproducible ya que esto sucede en una aplicación enorme
- Cuando digo 'ocasionalmente' Quiero decir con el mismo método en mi solicitud pero durante varias instancias. Además, cuando falla una vez cuando se ejecuta, fallará cada vez para esa instancia de la aplicación.
Actualización 2
La aplicación en cuestión utiliza una cantidad enoooooooormes de la memoria y se ejecuta en 32 bits de XP. Estoy pensando que tal vez sea una excepción TypeLoadException o OutOfMemoryException que de alguna manera se está tragando (pero no puedo ver cómo, como he intentado esto con excepciones de primera oportunidad activadas en el depurador).
Actualización 3
se encontró con el mismo problema hace un momento. Aquí está el seguimiento de la pila: El código hasta este punto es, literalmente, sólo:
Type tradeType = typeof(MyTradeType)
TradeFactory.CreateTrade(tradeType)
(antes, era ..CreateTrade(typeof(MyTradeType))
por lo no podía decir realmente si el typeof
devuelve null)
Parece que typeof()
no devuelve nulo pero se establece en nulo para cuando termina en el método CreateTrade
.
La excepción (NullReferenceException
) tiene una propiedad HResult
de 0x80004003
(Invalid pointer
). Una llamada al System.Runtime.InteropServices.Marshal.GetLastWin32Error()
(en la ventana Inmediato) devuelve 127 (The specified procedure could not be found)
. He buscado en la ventana Módulos y el módulo que contiene este tipo y método se ha cargado y no parece haber ningún error de cargador.
Interesante. ¿Puedes proporcionar una muestra de código que demuestre el problema? – Amy
¿"Ocasionalmente" significa esporádicamente en la misma llamada o en ciertos lugares pero no en otros? – BoltClock
Yo, por mi parte, no puedo imaginar ninguna manera de que esto pueda suceder. – leppie