Иногда я вижу, что typeof(Foo) возвращает null. Почему это произойдет?
Это в С#,.NET 3.5.
Я думал, что это может иметь какое-то отношение к сборке, содержащей тип, который еще не загружен, но тестовое приложение показывает, что сборка загружается в начале метода, где используется typeof.
Любые идеи?
Обновление 1
- Я не могу предоставить воспроизводимый образец, как это происходит в огромном приложении
- Когда я говорю "иногда", я имею в виду тот же метод в моем приложении, но в разных случаях. Кроме того, когда он не работает один раз при запуске, он будет терпеть неудачу каждый раз для этого экземпляра приложения.
Обновление 2
В рассматриваемом приложении используется huuuuuge объем памяти и работает на 32-битной XP. Я думаю, возможно, это TypeLoadException или OutOfMemoryException, которые каким-то образом проглатываются (но я не вижу, как, как я пробовал это, с исключениями первого шанса, включенными в отладчике).
Обновление 3
В этот же самый вопрос только сейчас. Здесь трассировка стека:
Код до этого момента буквально справедлив:
Type tradeType = typeof(MyTradeType)
TradeFactory.CreateTrade(tradeType)
(раньше это было ..CreateTrade(typeof(MyTradeType)), поэтому я не мог сказать, вернул ли typeof null)
Итак, похоже, что typeof() не возвращает null, но получает значение null до того момента, пока оно закончится в CreateTrade.
Исключение (NullReferenceException) имеет свойство HResult 0x80004003 (Invalid pointer). Вызов System.Runtime.InteropServices.Marshal.GetLastWin32Error( ) (в окне Immediate) возвращает 127 (The specified procedure could not be found).
Я просмотрел окно "Модули", и модуль, который содержит этот тип и метод, был загружен и не выглядит ошибкой загрузчика.