2012-04-01 20 views
0

私は次の行に「null参照」の例外を取得:SetMolePublicInstanceでnull参照例外が発生するのはなぜですか?

MoleRuntime.SetMolePublicInstance(stub, receiverType, objReceiver, name, null); 

プログラムを構築し、正しくコンパイル。メソッドのパラメータのいずれについても不平はありません。

ここでオブジェクトブラウザから、SetMolePublicInstanceの仕様です。ここで

SetMolePublicInstance(System.Delegate _stub, System.Type receiverType, object _receiver, string name, params System.Type[] parameterTypes) 

は、「ローカル」のパラメータ値は次のとおりです。

+ stub {Method = {System.String <StaticMethodUnitTestWithDeq>b__0()}} System.Func<string> 
+ receiverType {Name = "OrigValue" FullName = "OrigValueP.OrigValue"} System.Type {System.RuntimeType} 
objReceiver {OrigValueP.OrigValue} object {OrigValueP.OrigValue} 
name "TestString" string 
parameterTypes null object[] 

私はたTestStringは、()は、パラメータとリターンを取らないことを知っています私はSetMolePublicInstanceの最後のパラメータに "null"を指定しました。すでに述べたように、これはOKです。ここで

は、スタックトレースがあります:

Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object. 
    at  Microsoft.ExtendedReflection.Collections.Indexable.ConvertAllToArray[TInput,TOutput](TInput[] array, Converter`2 converter) 
    at Microsoft.Moles.Framework.Moles.MoleRuntime.SetMole(Delegate _stub, Type receiverType, Object _receiver, String name, MoleBindingFlags flags, Type[] parameterTypes) 
    at Microsoft.Moles.Framework.Moles.MoleRuntime.SetMolePublicInstance(Delegate _stub, Type receiverType, Object _receiver, String name, Type[] parameterTypes) 
    at DeqP.Deq.Replace[T](Func`1 stub, Type receiverType, Object objReceiver, String name) in C:\0VisProjects\DecP_04\DecP\DeqC.cs:line 38 
    at DeqPTest.DecCTest.StaticMethodUnitTestWithDeq() in C:\0VisProjects\DecP_04\DecPTest\DeqCTest.cs:line 28 
    at Starter.Start.Main(String[] args) in C:\0VisProjects\DecP_04\Starter\Starter.cs:line 14 
Press any key to continue . . . 

nullパラメータを避けるために、私は次の行のように "parameterTypesパラメータ" に、最終的な "ヌル" に変更:

MoleRuntime.SetMolePublicInstance(stub, receiverType, objReceiver, name, parameterTypes); 

私は行を挿入しました:moles.runner.exeを使用

Type [] parameterTypes = new Type[0]; 

は、所望の結果を生成:)

答えて

0

コンパイラはNullReferenceExceptionをチェックできません。これは実行時の例外であるためです。この例外は、引数に渡されるオブジェクトの1つが、インスタンスを指し示すことが予想される場合にnullであることを意味します。

テストプロジェクトのその行にブレークポイントを配置します。デバッグモードでテストを実行すると、その行が壊れて、どの引数がnullであるかを見ることができます。

+0

マイク、あなたはhttp://stackoverflow.com/questions/10900775/why-does-xml-deserialize-data-to-erer-caseの元に戻すことを検討しますか?あなたに有用なコメントを与えるために研究に時間がかかったのは合理的な質問だったようですが、これは有益な答えです。それに同意するならば、コミュニティから情報を取得する意思がありましたか? (その質問が何らかの形で完全に誤解されていたのではなく、私の要求を忘れてしまった。) –

関連する問題