Иногда я вижу, что 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)
.
Я просмотрел окно "Модули", и модуль, который содержит этот тип и метод, был загружен и не выглядит ошибкой загрузчика.