Itérer sur les paramètres de la méthode à des fins de validation
J'ai pensé qu'il serait utile de pouvoir faire une telle chose, par exemple, pour vérifier les paramètres de références nulles et éventuellement de lever une exception.
Cela permettrait de gagner un peu de temps et aussi, il serait impossible d'oublier d'ajouter une case si un nouveau paramètre est ajouté.
OriginalL'auteur RobSullivan | 2009-10-01
Vous devez vous connecter pour publier un commentaire.
Bien, non, sauf si vous comptez:
Pour éviter la création de la matrice a frappé, vous pourriez avoir un certain nombre de surcharges pour différents nombres d'arguments:
Une alternative serait d'utiliser les attributs de déclarer que les paramètres ne devrait pas être nulle, et obtenir PostSharp pour générer les contrôles appropriés:
Certes je voudrez probablement PostSharp de le convertir en Les Contrats De Code des appels, mais je ne sais pas comment bien les deux jouent ensemble. Peut-être un jour, nous allons être en mesure d'écrire les Spec#:
... mais pas dans un futur proche 🙂
Pense que l'auteur veut quelque chose comme javascript arguments du mot-clé. E. g. liste de tous les arguments dans la "Foo(string x, l'objet y, Stream z, int a) la" méthode et de tester la valeur null sans préciser à chacun d'entre eux, mais l'appel à une méthode générique comme "ValidateArgs(Foo.arguments);".
Eh bien, oui - vous ce n'est pas tout à fait prêt à la production de encore 🙂
Le problème avec cette approche est que vous devez écrire "CheckNotNull' dans chaque méthode, ce qui est assez fastidieux ...
Parce que si c'est un Code des Contrats d'appel, puis la vérification statique serait en mesure de me prévenir si il pensait que je pourrais lui passer un argument null. La vérification statique des roches 🙂
OriginalL'auteur Jon Skeet
Vous pouvez définir des paramètres de méthode avec un
params
mot-clé. Ainsi, il est possible de passer une variable de longueur nombre de paramètres à votre méthode. Vous pouvez parcourir et vérifier les références nulles ou ce que vous voulez avec elle.À mon avis, toutefois, il n'est pas une bonne façon de faire les choses. Vous aurez à contrôler manuellement le type de vos paramètres, leur position dans le tableau d'entrée et vous ne serez pas en mesure d'utiliser intellisense pour eux dans Visual Studio.
OriginalL'auteur RaYell
J'ai eu la même question il y a quelques temps, mais je voulais le faire à des fins de journalisation. Je n'ai jamais trouvé une bonne solution, mais trouvé ce lien concernant l'utilisation d'un AOP approche fondée sur les méthode de journalisation d'entrées et de sortie. L'essentiel, c'est le besoin d'utiliser un framework qui permet la lecture de votre classe et injecter du code à l'exécution pour faire ce que vous essayez de faire. N'a pas l'air facile.
Comment faire pour intercepter un appel de méthode en C#?
OriginalL'auteur Binz
Il est possible d'itérer sur les paramètres qui ont été déclarées pour une méthode (par réflexion), mais je ne vois aucun moyen de récupérer la valeur de ces paramètres pour un appel de méthode spécifique ...
Peut-être que vous pourriez utiliser Postsharp, et de créer un aspect dans lequel vous effectuer cette vérification. Puis, au moment de la compilation, Postsharp peut 'tisser' l'aspect (injection de code supplémentaire) à chaque méthode que vous avez écrit ...
OriginalL'auteur Frederik Gheysels
Vous pouvez regarder dans La Validation De Bloc D'Application qui peut être traité comme un exemple de validation automatique et L'Unité De Bloc D'Application (en particulier son interception fonction) en ce qui concerne l'interception des appels et de l'inspection des paramètres.
OriginalL'auteur Dzmitry Huba
Vous pourrait très probablement automatiser la vérification des paramètres avec un AOP bibliothèque comme PostSharp.
OriginalL'auteur Noldorin
Après avoir fourni un exemple trivial d'une méthode à l'aide de la
params
mot-clé, RaYell dit:Je serais certainement d'accord que la déclaration d'une méthode qui prend deux
strings
, unint
, unobject
que peut avoir la valeur null, et un autreMyClass
objet à l'aide deparams
est une mauvaise idée. Cependant, il y sont (à mon avis) parfaitement valide et approprié aux applications de laparams
mot-clé, à savoir lorsque les paramètres sont tous du même type. Par exemple:OriginalL'auteur Dan Tao
Vous obtiendrez la liste des paramètres nuls.
Alors vous pouvez simplement ajouter
OriginalL'auteur Siddhesh M.