代码

/// <summary> 断言器,用于判断和抛出异常
/// </summary>
static class Assertor
{
/// <summary> 如果value值是null 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
public static void AreNull(object value, string name)
{
if (value == null)
{
throw new ArgumentNullException(name, "参数不能为null");
}
} /// <summary> 如果value字符串是null或string.Empty 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
public static void AreNullOrEmpty(string value, string name)
{
if (value == null || value.Length == )
{
throw new ArgumentNullException(name, "字符串不能为null或空");
}
} /// <summary> 如果value字符串是 null、空还是仅由空白字符组成 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
public static void AreNullOrWhiteSpace(string value, string name)
{
if (string.IsNullOrWhiteSpace(value))
{
throw new ArgumentNullException(name, "字符串不能为null或连续空白");
}
} /// <summary> 如果value集合是null或者Count是0 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
public static void AreNullOrEmpty(ICollection value, string name)
{
if (value == null || value.Count == )
{
throw new ArgumentNullException(name, "集合不能为null且必须有元素");
}
} /// <summary> 如果value值超过min~max 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
/// <param name="min">最小值</param>
/// <param name="max">最大值</param>
public static void AreInRange<T>(T value, string name, T min, T max)
where T : IComparable<T>
{
if (value.CompareTo(min) < || value.CompareTo(max) > )
{
throw new ArgumentOutOfRangeException(name, value, "值不能大于" + max + "或小于" + min);
}
} /// <summary> 如果value值超过min~max 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
/// <param name="min">最小值</param>
/// <param name="max">最大值</param>
public static void AreInRange<T>(IComparable value, string name, T min, T max)
where T : IComparable
{
if (value.CompareTo(min) < || value.CompareTo(max) > )
{
throw new ArgumentOutOfRangeException(name, value, "值不能大于" + max + "或小于" + min);
}
} /// <summary> 如果value不是T类型或其子类 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
public static void AreType<T>(object value, string name)
{
if (value is T == false)
{
throw new ArgumentOutOfRangeException(name, value + " 值不是指定的类型 '" + typeof(T) + "'");
}
} /// <summary> 如果value不是Type类型或其子类 则抛出异常
/// </summary>
/// <param name="type">限定类型</param>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
public static void AreType(Type type, object value, string name)
{
if (type.IsInstanceOfType(value) == false)
{
throw new ArgumentOutOfRangeException(name, value + " 值不是指定的类型 '" + type + "'");
}
} /// <summary> 如果value不是数字类型 则抛出异常
/// </summary>
/// <param name="value">参数值</param>
/// <param name="name">参数名称</param>
public static void AreNumberType(object value, string name)
{
var conv = value as IConvertible;
if (conv == null)
{
var code = (int)conv.GetTypeCode();
if (code < || code > )
{
throw new ArgumentOutOfRangeException(name, value + "不是数字类型");
}
}
} /// <summary> 如果condition是true 则抛出异常
/// </summary>
/// <param name="condition">判断条件</param>
/// <param name="message">异常消息</param>
public static void AreTrue<T>(bool condition, string message)
where T : Exception, new()
{
if (condition)
{
var ex = new T();
var lit = Literacy.Cache(typeof(Exception), false);
lit.Load.NonPublicField();
lit.Field["_message"].SetValue(ex, message);
throw ex;
}
} /// <summary> 如果condition是false 则抛出异常
/// </summary>
/// <param name="condition">判断条件</param>
/// <param name="message">异常消息</param>
public static void AreFalse<T>(bool condition, string message)
where T : Exception, new()
{
AreTrue<T>(!condition, message);
} /// <summary> 如果condition是true 则抛出NotSupportedException异常
/// </summary>
/// <param name="condition">判断条件</param>
/// <param name="message">异常消息</param>
public static void AreTrue(bool condition, string message)
{
AreTrue<NotSupportedException>(condition, message);
} /// <summary> 如果condition是false 则抛出NotSupportedException异常
/// </summary>
/// <param name="condition">判断条件</param>
/// <param name="message">异常消息</param>
public static void AreFalse(bool condition, string message)
{
AreTrue<NotSupportedException>(!condition, message);
}
}

调用

private static SimpleCache<IComponentFactory> GetFactoryCache()
{
return new SimpleCache<IComponentFactory>(true, key => {
IComponentFactory factory;
var provider = _ProvideCache[key];
if (provider == DBProvider.Other)
{
var type = Type.GetType(key, false, false);
Assertor.AreTrue<NotSupportedException>(type == null, "没有找到名为" + key + "的类型");
factory = Activator.CreateInstance(type) as IComponentFactory;
Assertor.AreTrue<NotSupportedException>(factory == null, type.FullName + "无法实例化或没有继承IComponentFactory");
}
else
{
factory = ComponentFactory.Create(provider);
}
return factory;
});
}

CodeCSDN

https://code.csdn.net/snippets/389206

Assertor用于判断参数和抛出异常的更多相关文章

  1. 一个diff工具,用于判断两个目录下所有的改动(比较新旧版本文件夹)

    需求: 编写一个diff工具,用于判断两个目录下所有的改动 详细介绍: 有A和B两个目录,目录所在位置及层级均不确定 需要以B为基准找出两个目录中所有有改动的文件(文件或内容增加.修改.删除),将有改 ...

  2. python 反射机制 ( 广泛应用于URL参数)

    web实例 考虑有这么一个场景,根据用户输入的url的不同,调用不同的函数,实现不同的操作,也就是一个url路由器的功能,这在web框架里是核心部件之一.下面有一个精简版的示例: 首先,有一个comm ...

  3. Attribute注解(用于判断权限)

    一  Attribute原理: Attribute注解,是附加上方法.属性.类等上面的标签,可以通过方法的GetCustomAttribute获得粘贴的这个Attribute对象通过反射调用到粘贴到属 ...

  4. stop() 是用于停止动画 :animated 用于判断动画是否在进行中

    stop() 是用于停止动画 if($("element").is(":animated"))  用于判断动画是否在进行中

  5. JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内

    /* *JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内 *@param date1 date2(形如:'2015-01-01'类 ...

  6. obj.getClass() == Person.class 用于判断类型

    obj.getClass() == Person.class  用于判断类型

  7. 这是一个用于判断IE浏览器版本的紧凑脚本

    这是一个用于判断IE浏览器版本的紧凑脚本IE浏览器,不管它们是什么版本,总是与Web标准有些不兼容.对于编码人员来说,这很困难.为了考虑IE的兼容性,不管它是写CSS还是写JS,IE通常都会被特殊处理 ...

  8. instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。

    http://lavasoft.blog.51cto.com/62575/79864/    深入Java关键字instanceof 2008-06-02 07:50:43 标签:Java 关键字 休 ...

  9. jQuery.isEmptyObject()函数用于判断指定参数是否是一个空对象。

    jquery中有一个函数isEmptyObject()用来判断制定参数是否是一个空对象. 示例如下: function isEmptyObject(e) { var t; for (t in e) r ...

随机推荐

  1. 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少

    开本系列,讨论一些有趣的 CSS 题目,抛开实用性而言,一些题目为了拓宽一下解决问题的思路,此外,涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉 ...

  2. Content Security Policy 入门教程

    阮一峰文章:Content Security Policy 入门教程

  3. 让kindeditor显示高亮代码

    kindeditor4.x代码高亮功能默认使用的是prettify插件,prettify是Google提供的一款源代码语法高亮着色器,它提供一种简单的形式来着色HTML页面上的程序代码,实现方式如下: ...

  4. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍

    1年前,我在文章:这些.NET开源项目你知道吗?.NET平台开源文档与报表处理组件集合(三)中(第9个项目),给大家推荐了一个开源免费的PDF读写组件 PDFSharp,PDFSharp我2年前就看过 ...

  5. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  6. python笔记(持续更新)

    1.编译python遇到下面的编码问题:     SyntaxError: Non-ASCII character '\xe9' in file E:\projects\learn.py on lin ...

  7. 【干货分享】流程DEMO-事务呈批表

    流程名: 事务呈批表  业务描述: 办公采购.会议费用等事务的申请.流程发起时,会检查预算,如果预算不够,将不允许发起费用申请,如果预算够用,将发起流程,同时占用相应金额的预算,但撤销流程会释放相应金 ...

  8. 在Linux配置Nginx web服务器步骤

    系统环境:centos7 需要软件:nginx-1.3.16.tar.gz   libevent-2.0.21-stable.tar.gz  Pcre 和 pcre-devel nginx下载地址:h ...

  9. [PHP源码阅读]strpos、strstr和stripos、stristr函数

    我在github有对PHP源码更详细的注解.感兴趣的可以围观一下,给个star.PHP5.4源码注解.可以通过commit记录查看已添加的注解. strpos mixed strpos ( strin ...

  10. [Intel Edison开发板] 02、Edison开发板入门

    一.前言 Start from the link: 开始学习的链接 上面链接是官网的教程,按照教程可以开发板入门: 其中第一步是了解开发板,涉及到如何组装.如何连线.一些主要的接口简单介绍等信息: 第 ...