- Notifications
You must be signed in to change notification settings - Fork10
If you are just starting out on a new project I recommend usinghttps://github.com/adamralph/liteguard instead of conditions. Especially if using in a mobile application, less allocations and better performance. This project is deprecated and needs a new maintainer. Contact me if you want to take over.
License
ghuntley/conditions
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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
publicICollectionGetData(Nullable<int>id,stringxml,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 failureCondition.Requires(xml,"xml").StartsWith("<data>")// throws ArgumentException on failure.EndsWith("</data>")// throws ArgumentException on failure.Evaluate(xml.Contains("abc")||xml.Contains("cba"));// arg exCondition.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 nullobjectresult=BuildResults(xml,col);// Check all postconditions:Condition.Ensures(result,"result").IsOfType(typeof(ICollection));// throws PostconditionException on failurereturn(ICollection)result;}publicstaticint[]Multiply(int[]left,int[]right){Condition.Requires(left,"left").IsNotNull();// You can add an optional description to each checkCondition.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. Withusing static Condition;
you have no longer to prefixRequried
andEnsures
methods with name ofCondition
static class.
For example:
namespaceFoo{usingstaticCondition;publicclassBar{publicvoidBuzz(objectarg){Required(arg).IsNotNull();}}}
You can add C#6 features to your project by installingMicrosoft.Net.Compilers nuget.
- The icon "Tornado" designed byAdam Whitcroft from The Noun Project.
- With thanks toForgeDoc 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.
About
If you are just starting out on a new project I recommend usinghttps://github.com/adamralph/liteguard instead of conditions. Especially if using in a mobile application, less allocations and better performance. This project is deprecated and needs a new maintainer. Contact me if you want to take over.