Ich habe gedacht, dass es nützlich wäre, so etwas zu tun, zum Beispiel, um die Parameter für Null-Referenzen zu überprüfen und schließlich eine Ausnahme auszulösen.
Dies würde ein wenig Tipparbeit ersparen und es würde auch unmöglich machen, eine Überprüfung zu vergessen, wenn ein neuer Parameter hinzugefügt wird.
Nun, es sei denn, Sie zählen:
%Vor%Um den Treffer bei der Array-Erstellung zu vermeiden, könnten Sie eine Reihe von Überladungen für verschiedene Anzahlen von Argumenten haben:
%Vor%Eine Alternative wäre, Attribute zu verwenden, um zu deklarieren, dass Parameter nicht Null sein sollten, und PostSharp zu erhalten, um die entsprechenden Überprüfungen zu erzeugen:
%Vor%Zugegebenermaßen würde ich wahrscheinlich wollen, dass PostSharp es in Code Contracts umwandelt, aber ich weiß nicht, wie gut die beiden sind Zusammen spielen. Vielleicht ein Tag werden wir in der Lage sein, das Spec # -like zu schreiben:
%Vor%... aber nicht in naher Zukunft:)
Sie können Methodenparameter mit einem Schlüsselwort params
definieren. Dies ermöglicht es, eine Anzahl von Parametern mit variabler Länge an Ihre Methode zu übergeben. Sie können dann über sie iterieren und nach Nullreferenzen oder was auch immer Sie damit suchen.
Meiner Meinung nach ist es jedoch keine gute Art, Dinge zu tun. Sie müssen den Typ Ihrer Parameter und ihre Position im Eingabearray manuell steuern, und Sie können Intellisense für sie in Visual Studio nicht verwenden.
Ich hatte die gleiche Frage schon vor einiger Zeit, wollte das aber zum Zwecke der Protokollierung tun. Ich habe nie eine gute Lösung gefunden, aber fand diesen Link in Bezug auf die Verwendung eines AOP-basierten Ansatzes für das Protokollieren von Methodeneinträgen und Exit. Das Wesentliche davon ist, dass Sie ein Framework verwenden müssen, das Ihre Klasse lesen und Code zur Laufzeit injizieren kann, um das zu tun, was Sie versuchen zu tun. Klingt nicht einfach.
Es ist möglich, über die Parameter, die für eine Methode deklariert wurden (über Reflektion), zu iterieren, aber ich sehe keine Möglichkeit, den Wert dieser Parameter für einen bestimmten Methodenaufruf abzurufen ...
Vielleicht könnten Sie Postsharp verwenden und einen Aspekt erstellen, in dem Sie diese Überprüfung durchführen. Dann kann Postsharp beim Kompilieren den Aspekt "weben" (injiziere zusätzlichen Code) bei jeder Methode, die du geschrieben hast ...
Sie können den Validierungsanwendungsblock einsehen, der als ein Beispiel für automatisierte Prozesse angesehen werden kann Validierung und Der Unity Application Block (insbesondere seine Abhörfunktion) in Bezug auf das Abfangen von Anrufen und die Überprüfung Parameter.
Nachdem Sie ein einfaches Beispiel für eine Methode mit dem Schlüsselwort params
angegeben haben, sagt RaYell:
Meiner Meinung nach ist es jedoch nicht gut Art, Dinge zu tun. Du wirst es müssen manuell steuern Sie den Typ Ihres Parameter, ihre Position in der Eingabe-Array und Sie werden nicht in der Lage sein Verwenden Sie Intellisense für sie in Visual Studio.
Ich würde sicherlich zustimmen, dass das Deklarieren einer Methode, die zwei strings
, eine int
, eine object
, die null sein kann, und ein anderes MyClass
-Objekt, das params
verwendet, eine schlechte Idee ist. Allerdings sind (meiner Meinung nach) perfekt gültige und geeignete Anwendungen des Schlüsselworts params
, wenn die Parameter alle vom selben Typ sind. Zum Beispiel:
Sie erhalten die Liste der Null-Parameter.
Also kannst du einfach
hinzufügen %Vor%