Ist es möglich, die Methodenparameter in C # zu durchlaufen?

8

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.

    
RobSullivan 01.10.2009, 12:24
quelle

8 Antworten

15

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:)

    
Jon Skeet 01.10.2009, 12:29
quelle
2

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.

%Vor%

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.

    
RaYell 01.10.2009 12:30
quelle
1

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.

Wie kann ich einen Methodenaufruf in C # abfangen?

    
Binz 01.10.2009 12:40
quelle
0

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

    
Frederik Gheysels 01.10.2009 12:28
quelle
0

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.

    
Dzmitry Huba 01.10.2009 12:28
quelle
0

Sie könnten die Parameterprüfung sehr wahrscheinlich mit einer AOP Bibliothek automatisieren, z. B. PostSharp .

    
Noldorin 01.10.2009 12:33
quelle
0

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:

%Vor%     
Dan Tao 01.10.2009 12:55
quelle
0
%Vor%

Sie erhalten die Liste der Null-Parameter.

Also kannst du einfach

hinzufügen %Vor%     
Siddhesh M. 09.05.2017 12:33
quelle

Tags und Links