Czasami widzę, że typeof(Foo)
zwraca wartość null. Dlaczego tak się stało?Dlaczego funkcja typeof (Foo) kiedykolwiek zwróci wartość null?
To jest w języku C#, .NET 3.5.
Pomyślałem, że może to mieć coś wspólnego z zestawem zawierającym typ, który nie został jeszcze załadowany, ale aplikacja testowa pokazuje, że zespół jest ładowany na początku metody, gdzie jest używany typeof
.
Wszelkie pomysły?
Aktualizacja 1
- Nie mogę zapewnić powtarzalną próbkę jak to dzieje się na ogromnym aplikacji
- Kiedy mówię „czasami” mam na myśli w ten sam sposób w mojej aplikacji ale w różnych przypadkach. Ponadto, gdy raz się nie powiedzie, będzie za każdym razem niepowodzeniem dla tej instancji aplikacji.
Aktualizacja 2
danego zastosowania używa huuuuuge ilość pamięci i działa na XP 32bit. Myślę, że może to wyjątek TypeLoadException lub OutOfMemoryException, który jest w jakiś sposób połknięty (ale nie widzę jak, jak próbowałem tego z włączonymi w debugerze wyjątkami pierwszej szansy).
Aktualizacja 3
Ran w tej samej kwestii właśnie teraz. Oto ślad stosu: Kod do tego punktu jest dosłownie:
Type tradeType = typeof(MyTradeType)
TradeFactory.CreateTrade(tradeType)
(wcześniej było ..CreateTrade(typeof(MyTradeType))
tak nie mogłem rzeczywiście powiedzieć, czy typeof
powrócił zerowy)
Wygląda na to, że typeof()
nie zwraca wartości null, ale jest to ustawianie wartości pustej przed zakończeniem w metodzie CreateTrade
.
Wyjątek (NullReferenceException
) ma właściwość HResult
z 0x80004003
(Invalid pointer
). Połączenie z numerem System.Runtime.InteropServices.Marshal.GetLastWin32Error()
(w okienku natychmiastowym) zwraca 127 (The specified procedure could not be found)
. Zajrzałem do okna Moduły, a moduł zawierający ten typ i metodę został załadowany i nie wygląda na to, aby wystąpiły jakiekolwiek błędy modułu ładującego.
Interesujące. Czy możesz podać przykład kodu, który demonstruje problem? – Amy
Czy "sporadycznie" oznacza sporadycznie w tym samym połączeniu lub w niektórych miejscach, ale nie w innych? – BoltClock
Nie można sobie wyobrazić, by tak się mogło kiedykolwiek wydarzyć. – leppie