2009-01-12 3 views
5

Je suis terriblement fatigué de vérifier tous mes arguments pour null, et de lancer ArgumenutNullExceptions quand ils le sont. Si je comprends bien, C# 4.0 permet une certaine conception par des constructions contractuelles. Sera-t-il possible de spécifier qu'une méthode n'acceptera pas les arguments NULL dans C# 4.0?Conception par contrat/C# 4.0/éviter ArgumentNullException

De plus, y a-t-il quelque chose que je puisse faire entre temps (peut-être un attribut?) Pour éviter cette tâche monotone de vérification de null et de lancer?

Répondre

2

Je ne suis pas sûr des constructions DbC natives dans C# 4.0 mais Microsoft va publier une bibliothèque inter-langages Contracts. Vous pouvez télécharger la version pour MSVS2008 here.

1

Comme alternative aux réponses déjà données, il convient d'examiner dans le Null Object design pattern.

L'essence de ce modèle de conception est qu'une fois le « objet nul » est créé, il ne sera plus nécessaire d'effectuer toute vérification de null et les méthodes de l'objet nul implémentent le comportement souhaité à chaque fois qu'une valeur null (sinon) aurait été passée par rapport à une référence à un "objet réel".

Ce modèle de conception ne dépend pas de C# 4.0 et peut en fait être facilement implémenté dans presque n'importe quel langage de programmation OO.

+0

C'est un excellent modèle, mais il n'empêche pas les appelants de transmettre des valeurs nulles réelles. –

4

Rick Brewster décrit une bonne solution pour le paramètre de style concis, déclarative vérifier dans ce post,

http://blog.getpaint.net/2008/12/06/a-fluent-approach-to-c-parameter-validation/

Evite utilisation de la réflexion (inconvénient de DBC) et crée pas de frais généraux pour le chemin de code non exceptionnel.

Comme il utilise des méthodes d'extension pour autoriser ce qui semble être des appels de méthode d'instance sur des objets NULL. Un bit très intelligent de codage IMO.

Si vous êtes vendu sur DbC, Google SpeC# et PostSharp.