Feedback

Überprüfung von Übergabeparameter – Deklarativ

Sprache: C#

Um den Code übersichtlicher zu gestallten und kompakter zu gestallten empfiehlt sich eine wiederverwertbare Klasse. In diesem Fall eine Statische Klasse. Eine einfache Klasse auf dessen Basis die Funktionen von dem .NET 4.0 Feature Contract in ähnlicher Weise nachgebaut werden kann.
// Implementierung
///<example>
///Contract.Ensure ( () => !string.IsNullOrEmpty ( filename ), "Filename is not allowed to be null or Empty" 
);
///</example>
public class Contract
{
	public static void Ensure ( Func<bool> predicate, string message )
	{
		if ( predicate () )
		{
			throw new ArgumentException ( message );
		}
	}
}
// Implementierung
///<example>
///Contract.Ensure ( () => !string.IsNullOrEmpty ( filename ), "Filename is not allowed to be null or Empty" 
);
///</example>
public class Contract
{
	public static void Ensure ( Func<bool> predicate, string message )
	{
		if ( predicate () )
		{
			throw new ArgumentException ( message );
		}
	}
}

3 Kommentare

  1. ich verstehe nicht wieso das besser ist als
    [code]string filename = „“;
    if (filename.Equals(null) || filename.Equals(string.Empty))
    throw new ArgumentException(„Filename is not allowed to be null or Empty“);
    [/code]
    Ausserdem macht dein Snippet genau das Gegenteil von dem was es soll. Mit
    [code]if(predicate())
    …[/code]
    funktioniert es. Ich hab’s gerade getestet.

  2. Schon behoben. Das war mir gestern beim Testen schon passiert. Hab den falschen Ausdruck in der Lambda expression gehabt.

    Warum es besser ist? Es ist wiederverwehrtbar und es kann später durch Contracts aus dem .NET 4.0 Framework ausgetauscht werden.

    Deklarative Programmierung! Sag der Funktion was du reinstecken kannst, und was herauskommt und sie wird sicherer.