using Ardalis.GuardClauses;
public static void Main()
var parameterName = "someParameter";
ExecuteExample("Null (with message)", () => Guard.Against.Null(default(object), parameterName, "SomeParameter must not be null."));
ExecuteExample("Null (without message)", () => Guard.Against.Null(default(object), parameterName));
ExecuteExample("Out of Range (general, with message)", () => Guard.Against.OutOfRange(2, parameterName, 0, 1, "SomeParameter value must be from 0 to 1."));
ExecuteExample("Out of Range (general, without message)",() => Guard.Against.OutOfRange(2, parameterName, 0, 1));
ExecuteExample("Out of Range (enum v1, with message)",() => Guard.Against.OutOfRange<SomeEnum>(2, parameterName, "SomeParameter value be a valid SomeEnum value."));
ExecuteExample("Out of Range (enum v1, without message)",() => Guard.Against.OutOfRange<SomeEnum>(2, parameterName));
ExecuteExample("Out of Range (enum v2, with message)",() => Guard.Against.OutOfRange<SomeEnum>((SomeEnum)2, parameterName, "SomeParameter value be a valid SomeEnum value."));
ExecuteExample("Out of Range (enum v2, without message)",() => Guard.Against.OutOfRange<SomeEnum>((SomeEnum)2, parameterName));
ExecuteExample("Out of Range (enumerable, with message)", () => Guard.Against.OutOfRange(new [] {0, 1, 2}, parameterName, 0, 1, "SomeParameter value must be from 0 to 1."));
ExecuteExample("Out of Range (enumerable, without message)", () => Guard.Against.OutOfRange(new [] {0, 1, 2}, parameterName, 0, 1));
private static void ExecuteExample(string title, Action clauseToEvalute)
Console.WriteLine($"[{title}] => Guard clause did not throw.");
catch(ArgumentException ex)
var message = GenerateMessageFromException(ex);
Console.WriteLine($"[{title}] => {message}");
var message = GenerateMessageFromException(ex);
Console.WriteLine($"[{title}] => {message}");
private static string GenerateMessageFromException(ArgumentException ex)
return ex.ParamName is null ? "ParamName is NULL." : $"ParamName is {ex.ParamName}";
private static string GenerateMessageFromException(Exception ex)
return "Exception thrown is not an Argument Exception.";