Wie überprüfe ich, ob ein optionales Argument an eine Methode übergeben wurde?
%Vor% Ein anderer Ansatz ist die Verwendung von Nullable<T>.HasValue
( MSDN-Definitionen , MSDN-Beispiele ):
Nun, Argumente werden immer weitergegeben. Standardmäßige Parameterwerte stellen nur sicher, dass der Benutzer sie nicht explizit beim Aufruf der Funktion explizit angeben muss.
Wenn der Compiler einen Aufruf wie folgt sieht:
%Vor%Es konvertiert es still zu:
%Vor%Es ist also technisch nicht möglich festzustellen, ob das Argument zur Laufzeit übergeben wurde. Der nächste, den Sie bekommen könnten, ist:
%Vor%Aber das würde sich genauso verhalten, wenn der Benutzer es explizit so nennt:
%Vor%Wenn Sie wirklich ein anderes Verhalten haben wollen, je nachdem, ob ein Parameter angegeben ist oder nicht, dann sollten Sie die Standardparameter loswerden und stattdessen Überladungen verwenden, wie folgt:
%Vor%Sie können das nicht überprüfen, da die Methode mit optionalen Parametern eine reguläre Methode mit allen Parametern ist, einschließlich derjenigen, die Standardwerte haben. Ihre Methode wird also in folgende Elemente übersetzt:
%Vor%Standardwerte werden vom Compiler in den Aufrufpunkt eingefügt. Wenn du schreibst
%Vor%Dann generiert der Compiler den Aufruf
%Vor% Sie können vergleichen, ob optionalstr
oder optionalint
einen Wert hat, der dem Standardwert entspricht, aber Sie können nicht wirklich sagen, ob es vom Compiler oder vom Entwickler bereitgestellt wurde.
Sie können das nicht, also müssen Sie einen anderen Weg finden, nach dem "optionalen" Parameter zu suchen. Sie können eine Null übergeben, wenn der Parameter nicht verwendet wird, und dann
prüfen %Vor%Sie können die Methode auch überladen, wobei eine die optionalen Parameter und eine die optionalen Parameter nicht verwendet. Sie können auch festlegen, dass die Methode ohne die optionalen Parameter Nullen an eine der überladenen Methoden übergibt.
%Vor%Sie können nicht direkt überprüfen, aber Sie können es nach dem Standardwert überprüfen. zum Beispiel:
%Vor%oder
%Vor%Ansatz 2:
Sie können auch Überschreibungsmethoden verwenden:
%Vor% Ein anderer Ansatz ist die Verwendung von Nullable<T>.HasValue
( MSDN-Definitionen , MSDN-Beispiele ):
Um festzustellen, ob ein Argument an einen optionalen Parameter
übergeben wurdeTags und Links c# optional-parameters nullable argument-passing