場合によっては、typeof(Foo)
がnullを返すことがあります。なぜこれが起こるのだろうか?なぜtypeof(Foo)はnullを返すのですか?
これはC#、.NET 3.5です。
まだ読み込まれていない型を含むアセンブリとは関係があるかもしれないと思っていましたが、テストアプリケーションでは、メソッドの最初にロードされていることが示されています(typeof
が使用されています)。
アイデア?
アップデート1
- これは巨大なアプリケーション
- 私は「たまに」と言うとき、私は自分のアプリケーションでも同じ方法で意味に起こるように私は、再現性のサンプルを提供することはできません様々な例の間に。また、実行中に1度失敗すると、アプリケーションのそのインスタンスのたびに失敗します。
アップデート2
問題のアプリケーションがメモリのhuuuuuge量を使用し、32ビットXP上で動作します。私はおそらくTypeLoadExceptionまたはOutOfMemoryExceptionが何らかの形で飲み込まれていると思っています(しかし、私はデバッガで最初の例外を有効にしてこれを試したので、どのように見えませんか)。
アップデート3
ちょうど今、同じ問題に遭遇しました。ここでスタックトレースです: この時点までのコードは文字通りです:
Type tradeType = typeof(MyTradeType)
TradeFactory.CreateTrade(tradeType)
(typeof
がnullを返された場合、私は実際に言うことができなかったので前に、それは..CreateTrade(typeof(MyTradeType))
だった)
したがって、typeof()
はnullを返しません。ですが、それはメソッドで終了するまでにnullに設定されているです。
例外(NullReferenceException
)はHResult
プロパティが0x80004003
(Invalid pointer
)です。 System.Runtime.InteropServices.Marshal.GetLastWin32Error()
(イミディエイトウィンドウ内)の呼び出しは127 (The specified procedure could not be found)
を返します。 Modulesウィンドウを調べましたが、このタイプとメソッドを含むモジュールがロードされていて、ローダーエラーがないように見えます。 typeof(T)
ので
興味深い。問題を示すコードサンプルを提供できますか? – Amy
「時折」とは、同じ通話や特定の場所では散発的に意味しますか? – BoltClock
私は1つはこれが起こることができる方法を想像することはできません。 – leppie