Eine einfache C # -Methode mit einem optionalen Parameter, der mit dem OptionalAttribute als
deklariert wurde %Vor% On VS 2010. obj.Foo(3,4)
gibt 7
wie erwartet aus. Aber nicht auf VS 2008 oder früher, es sei denn, es gibt einen Standardwert, der das DefaultParameterValue-Attribut verwendet. So führt ein Aufruf von Foo(3,4)
auf VS2008 oder davor zu einem Fehler:
Object of type 'System.Reflection.Missing' cannot be converted to type 'System.Double'
Wenn sowohl beim VS 2008 als auch beim VS 2010 die Methode Foo mit reflection aufgerufen wird, wird derselbe Fehler ausgegeben, wenn der Standardwert für den optionalen Parameter nicht angegeben wird.
%Vor%Die Frage ist also:
Wie also kümmert sich der VS 2010-Compiler darum, dem optionalen Parameter den Standardwert zuzuordnen, aber das Framework 4.0 funktioniert nicht über Reflektion?
einfach gesagt, es ist, weil C # 3.5 optionale Parameter nicht unterstützt. Gemäß MSDN ,
Beachten Sie, dass das DefaultParameterValueAttribute keine Unterstützung für Standardparameter für Sprachen hinzufügt, die diese Funktion nicht unterstützen. Wenn Sie beispielsweise DefaultParameterValueAttribute mit einer in C # geschriebenen Methode verwenden, die keine Standardparameter unterstützt, können Sie den Standardparameter nicht verwenden, wenn Sie die Methode über C # aufrufen.
Optionale Parameter wurden mit .NET 4.0 in C # eingeführt. Ich bin mir nicht sicher, was Sie mit VS 2008 für ein älteres Framework erstellen, aber ich würde sagen, dass Sie sie nur in VS 2010 und .NET 4.0 verwenden sollten Benannte und optionale Argumente