Frage

Ich bin schrecklich müde zu überprüfen alle meine Argumente für null und werfen ArgumenutNullExceptions, wenn sie sind.

Wie ich es verstehe, C # 4.0 ermöglicht eine Gestaltung von Vertragskonstrukten. Wird es möglich sein, um anzugeben, dass eine Methode null Argumente nicht in C # akzeptieren 4.0?

Außerdem gibt es alles, was ich in der Zwischenzeit tun kann (vielleicht ein Attribut?) Diese monotone Aufgabe zu vermeiden, für null zu prüfen und zu werfen?

War es hilfreich?

Lösung

Sie können eine NotNull<T> generische Klasse, die hilft, aber es gibt einige Nebenwirkungen. Siehe Robert Nystrom Blog-Post .

Andere Tipps

Rick Brewster beschreibt eine gute Lösung für präziseen, deklarativen Stil Parameter 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, wie er verwendet Erweiterungsmethoden zu ermöglichen, was beispielsweise Methodenaufrufe auf null Objekte zu sein scheint. Sehr klug Bit von IMO-Codierung.

Wenn Sie verkauft werden auf DBC, Google Spec # und Postsharp.

Nicht sicher nativen Konstrukte DBC in C # 4.0, aber Microsoft wird zur Freigabe Quer Sprache hier .

Als Alternative zu den bereits gegebenen Antworten, ist es lohnt ein Blick in die Null Object design pattern.

Das Wesen dieses Design-Muster ist, dass, sobald das „Null-Objekt“ erstellt wird, wird es keine weitere für null alle Kontrollen durchführen muß und die Methoden des Null-Objekts das Verhalten gewünscht implementieren, wenn eine Null (sonst) hätte verabschiedet vs einem Verweis auf ein „reales Objekt“.

Dieses Design-Muster hängt nicht von C # 4.0 und in der Tat leicht in fast jeden OO-Programmiersprache implementiert werden kann .

Ich habe gerade angefangen mit Code Contracts seine eine neue Funktion in C # 4.0 benötigen Sie einen Addin von MS herunterladen, damit Sie es in den Projekteinstellungen zu sehen. Details hier -> http://research.microsoft.com/en-us/projects/contracts/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top