2009-01-12 15 views
5

Ich bin es leid, alle meine Argumente für null zu überprüfen und ArgumenutNullExceptions zu werfen, wenn sie sind.Design by contract/C# 4.0/ArgumentierenNullException

Wie ich es verstehe, ermöglicht C# 4.0 einige Design von Vertragskonstruktionen. Ist es möglich, anzugeben, dass eine Methode in C# 4.0 keine Nullargumente akzeptiert?

Kann ich in der Zwischenzeit auch etwas tun (vielleicht ein Attribut?), Um diese monotone Aufgabe zu vermeiden, nach Null zu suchen und zu werfen?

Antwort

2

Nicht sicher über native DbC-Konstrukte in C# 4.0, aber Microsoft wird die sprachübergreifende Contracts-Bibliothek freigeben.
Sie können die Version für MSVS2008 here herunterladen.

1

Als Alternative zu den bereits gegebenen Antworten, ist es wert, in das Null Object design pattern.

Das Wesen dieses Entwurfsmusters suchen ist, dass, sobald das „Null-Objekt“ erstellt wird, wird es keine weiteren durchführen muß Alle Prüfungen auf Null und die Methoden des Null-Objekts implementieren das gewünschte Verhalten, wenn eine Null (andernfalls) gegen eine Referenz auf ein "reales Objekt" übergeben würde.

Dieses Entwurfsmuster hängt nicht von C# 4.0 ab und kann tatsächlich in fast jeder OO-Programmiersprache implementiert werden.

+0

Es ist ein großartiges Muster, aber es hindert Caller nicht daran, tatsächliche Null-Werte zu übergeben. –

4

Rick Brewster beschreibt eine gute Lösung für präzise, ​​Parameter deklarativen Stil in diesem Beitrag Überprüfung

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

Vermeidet Verwendung von Reflexion (Nachteil DBC) und schafft keinen Mehraufwand für Nicht-Ausnahmecodepfad.

Wie er Extension-Methoden verwendet, um zu ermöglichen, dass Instanzmethode Aufrufe von Nullobjekten aufruft. Sehr cleveres Coding von IMO.

Wenn Sie auf DbC, Google SpeC# und PostSharp verkauft werden.