A new way to perform parameter validation in C# 3.0

首先看用法:
    class Program
    
{
        
static void Main(string[] args)
        
{
            
string param = null;
            
try
            
{
                DoSomething(param);
            }

            
catch (ContractException ex)
            
{
                Console.WriteLine(
"Exception: {0}", ex.Message);
            }

            Console.ReadKey();
        }


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

    }


运行结果是:
Exception: Contract broken: x => (value(CSharpByContract.Program+<>c__DisplayCla
ss0).param 
!= null)

加粗的部分显示了参数验证失败的原因.需要注意的是,我们在验证时并不用手写"param!=null"这样的字符串,节省了时间,也减少了不一致.

代码:
    public static class Contract
    
{
        
/// <summary>
        
/// lazy programer's assert that gives a meaningful contract broken message
        
/// </summary>
        
/// <param name="condition">a bool expression to assert to be true</param>

        public static void Requires(Expression<Func<objectbool>> condition)
        
{
            var x 
= condition.Compile();
            
if (!x(null))
                
throw new ContractException(condition.ToString());
        }

    }

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

    }


posted on   deerchao  阅读(441)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2008年2月 >
27 28 29 30 31 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 1
2 3 4 5 6 7 8

统计

点击右上角即可分享
微信分享提示