A new way to perform parameter validation in C# 3.0
首先看用法:
 class Program
    class Program
 {
    {
 static void Main(string[] args)
        static void Main(string[] args)
 {
        {
 string param = null;
            string param = null;
 try
            try
 {
            {
 DoSomething(param);
                DoSomething(param);
 }
            }
 catch (ContractException ex)
            catch (ContractException ex)
 {
            {
 Console.WriteLine("Exception: {0}", ex.Message);
                Console.WriteLine("Exception: {0}", ex.Message);
 }
            }
 Console.ReadKey();
            Console.ReadKey();
 }
        }

 private static void DoSomething(string param)
        private static void DoSomething(string param)
 {
        {
 Contract.Requires(x => param != null);
            Contract.Requires(x => param != null);
 Console.WriteLine("after validating parameters..");
            Console.WriteLine("after validating parameters..");
 }
        }
 }
    }

运行结果是: Exception: Contract broken: x => (value(CSharpByContract.Program+<>c__DisplayCla
Exception: Contract broken: x => (value(CSharpByContract.Program+<>c__DisplayCla
 ss0).param != null)
ss0).param != null)
加粗的部分显示了参数验证失败的原因.需要注意的是,我们在验证时并不用手写"param!=null"这样的字符串,节省了时间,也减少了不一致.
代码: public static class Contract
    public static class Contract
 {
    {
 /// <summary>
        /// <summary>
 /// lazy programer's assert that gives a meaningful contract broken message
        /// lazy programer's assert that gives a meaningful contract broken message
 /// </summary>
        /// </summary>
 /// <param name="condition">a bool expression to assert to be true</param>
        /// <param name="condition">a bool expression to assert to be true</param>
 public static void Requires(Expression<Func<object, bool>> condition)
        public static void Requires(Expression<Func<object, bool>> condition)
 {
        {
 var x = condition.Compile();
            var x = condition.Compile();
 if (!x(null))
            if (!x(null))
 throw new ContractException(condition.ToString());
                throw new ContractException(condition.ToString());
 }
        }
 }
    }

 public class ContractException : ApplicationException
    public class ContractException : ApplicationException
 {
    {
 public ContractException(string message)
        public ContractException(string message)
 : base(string.Format("Contract broken: {0}", message))
            : base(string.Format("Contract broken: {0}", message))
 {
        {
 }
        }
 }
    }

 class Program
    class Program {
    { static void Main(string[] args)
        static void Main(string[] args) {
        { string param = null;
            string param = null; try
            try {
            { DoSomething(param);
                DoSomething(param); }
            } catch (ContractException ex)
            catch (ContractException ex) {
            { Console.WriteLine("Exception: {0}", ex.Message);
                Console.WriteLine("Exception: {0}", ex.Message); }
            } Console.ReadKey();
            Console.ReadKey(); }
        }
 private static void DoSomething(string param)
        private static void DoSomething(string param) {
        { Contract.Requires(x => param != null);
            Contract.Requires(x => param != null); Console.WriteLine("after validating parameters..");
            Console.WriteLine("after validating parameters.."); }
        } }
    }
运行结果是:
 Exception: Contract broken: x => (value(CSharpByContract.Program+<>c__DisplayCla
Exception: Contract broken: x => (value(CSharpByContract.Program+<>c__DisplayCla ss0).param != null)
ss0).param != null)加粗的部分显示了参数验证失败的原因.需要注意的是,我们在验证时并不用手写"param!=null"这样的字符串,节省了时间,也减少了不一致.
代码:
 public static class Contract
    public static class Contract {
    { /// <summary>
        /// <summary> /// lazy programer's assert that gives a meaningful contract broken message
        /// lazy programer's assert that gives a meaningful contract broken message /// </summary>
        /// </summary> /// <param name="condition">a bool expression to assert to be true</param>
        /// <param name="condition">a bool expression to assert to be true</param> public static void Requires(Expression<Func<object, bool>> condition)
        public static void Requires(Expression<Func<object, bool>> condition) {
        { var x = condition.Compile();
            var x = condition.Compile(); if (!x(null))
            if (!x(null)) throw new ContractException(condition.ToString());
                throw new ContractException(condition.ToString()); }
        } }
    }
 public class ContractException : ApplicationException
    public class ContractException : ApplicationException {
    { public ContractException(string message)
        public ContractException(string message) : base(string.Format("Contract broken: {0}", message))
            : base(string.Format("Contract broken: {0}", message)) {
        { }
        } }
    }
 
    
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号