using System.Collections.Generic;
public static void Main(string[] args)
var validator = new Validator().Add((int item) => item == 5).Add((string s) => !String.IsNullOrWhiteSpace(s));
Console.Out.WriteLine(validator.Validate(5));
public interface IValidatorRule
public interface IValidatorRule<T> : IValidatorRule
public class IntValidatorRule : IValidatorRule<int>
public bool Validate(int item)
public class StringValidatorRule : IValidatorRule<String>
public bool Validate(String item)
return !String.IsNullOrEmpty(item);
public delegate bool ValidateDelegate<T>(T item);
public class GenRule<T> : IValidatorRule<T>
public ValidateDelegate<T> impl;
public GenRule(ValidateDelegate<T> cb)
public bool Validate(T item)
return impl.Invoke(item);
private List<IValidatorRule> rules = new List<IValidatorRule>();
public Validator Add<T>(ValidateDelegate<T> cb)
rules.Add(new GenRule<T>(cb));
public bool Validate<T>(T item)
foreach (IValidatorRule<T> rule in rules)
if (!rule.Validate(item))