Conditions is a cross platform portable class library that helps developers write pre- and postcondition validations in a fluent manner. Writing these validations is easy and it improves the readability and maintainability of code.
- .NET 4.5 (We are now a Portable Class Library)
- Mono
- Xamarin.iOS
- Xamarin.Android
- Xamarin.Mac
Installation is done via NuGet:
Install-Package Conditions
public ICollection GetData(Nullable<int> id, string xml, IEnumerable<int> col)
{
// Check all preconditions:
Condition.Requires(id, "id")
.IsNotNull() // throws ArgumentNullException on failure
.IsInRange(1, 999) // ArgumentOutOfRangeException on failure
.IsNotEqualTo(128); // throws ArgumentException on failure
Condition.Requires(xml, "xml")
.StartsWith("<data>") // throws ArgumentException on failure
.EndsWith("</data>") // throws ArgumentException on failure
.Evaluate(xml.Contains("abc") || xml.Contains("cba")); // arg ex
Condition.Requires(col, "col")
.IsNotNull() // throws ArgumentNullException on failure
.IsEmpty() // throws ArgumentException on failure
.Evaluate(c => c.Contains(id.Value) || c.Contains(0)); // arg ex
// Do some work
// Example: Call a method that should not return null
object result = BuildResults(xml, col);
// Check all postconditions:
Condition.Ensures(result, "result")
.IsOfType(typeof(ICollection)); // throws PostconditionException on failure
return (ICollection)result;
}
public static int[] Multiply(int[] left, int[] right)
{
Condition.Requires(left, "left").IsNotNull();
// You can add an optional description to each check
Condition.Requires(right, "right")
.IsNotNull()
.HasLength(left.Length, "left and right should have the same length");
// Do multiplication
}
A particular validation is executed immediately when it's method is called, and therefore all checks are executed in the order in which they are written:
C# 6 compiler provides easier way for accessing extension methods. With using static Condition;
you have no longer to prefix Requried
and Ensures
methods with name of Condition
static class.
For example:
namespace Foo
{
using static Condition;
public class Bar
{
public void Buzz(object arg)
{
Required(arg).IsNotNull();
}
}
}
You can add C#6 features to your project by installing Microsoft.Net.Compilers nuget.
- The icon "Tornado" designed by Adam Whitcroft from The Noun Project.
- With thanks to ForgeDoc for providing an open source license which is used to generate the class documentation.
- S. van Deursen who is the original author of "CuttingEdge.Conditions" from which this project was forked from.