2012-04-01 7 views
0

Ich erhalte eine „Null-Referenz“ Ausnahme in der folgenden Zeile:Warum null Referenz Ausnahme in SetMolePublicInstance?

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

Das Programm baut und kompiliert korrekt. Es gibt keine Beschwerden über irgendwelche Parameter der Methode.

Hier ist die Spezifikation von SetMolePublicInstance, von dem Objekt-Browser:

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

Hier die Parameterwerte für "Locals" sind:

+ 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[] 

Ich weiß, dass Teststring() keine Parameter und kehrt nimmt string, also als Starter, um Dinge zum Laufen zu bringen, habe ich für den letzten Parameter SetMolePublicInstance "null" angegeben. Wie bereits erwähnt, kompiliert dies OK.

Hier ist der Stack-Trace:

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 . . . 

die Null-Parameter zu vermeiden, änderte es die letzten "null" bis "parameterTypes", wie in der folgenden Zeile:

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

ich die Zeile eingefügt :

Type [] parameterTypes = new Type[0]; 

Mit moles.runner.exe die gewünschten Ergebnisse erzeugt :)

01.235.

Antwort

0

Der Compiler kann nicht auf NullReferenceException prüfen; weil es eine Laufzeitausnahme ist. Diese Ausnahme bedeutet, dass eines der an die Argumente übergebenen Objekte null ist, wenn erwartet wird, dass es auf eine Instanz zeigt.

Platzieren Sie einen Haltepunkt in dieser Zeile des Testprojekts. Wenn Sie den Test im Debug-Modus ausführen, wird die Zeile unterbrochen, sodass Sie sehen können, welches der Argumente null ist.

+0

Mike, würden Sie in Erwägung ziehen, die Wiederherstellung rückgängig zu machen http://stackoverflow.com/questions/10900775/why-does-xml-deserialize-data-to-lower-case? Es scheint mir, dass es eine vernünftige Frage war, die einige Zeit in Anspruch nahm, um Ihnen einen nützlichen Kommentar zu geben, eine nützliche Antwort. Wenn Sie dem zustimmen würden, wollten Sie dann die Informationen aus der Community mitnehmen? (Vergiss meine Anfrage, wenn diese Frage nur irgendwie völlig missverstanden wurde, eher als beantwortet.) –

Verwandte Themen