代码

/// <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. shell简介

    Shell作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. shell使用的熟练程度反映了用户对U ...

  2. 为.NET Core项目定义Item Template

    作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Template和Item Template就是一个非常 ...

  3. iOS逆向工程之Hopper中的ARM指令

    虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...

  4. 解读发布:.NET Core RC2 and .NET Core SDK Preview 1

    先看一下 .NET Core(包含 ASP.NET Core)的路线图: Beta6: 2015年7月27日 Beta7: 2015年9月2日 Beta8: 2015年10月15日 RC1: 2015 ...

  5. SDWebImage源码解读之SDWebImageCache(下)

    第六篇 前言 我们在SDWebImageCache(上)中了解了这个缓存类大概的功能是什么?那么接下来就要看看这些功能是如何实现的? 再次强调,不管是图片的缓存还是其他各种不同形式的缓存,在原理上都极 ...

  6. Git使用详细教程(二)

    分支 其实在项目clone下来后就有一个分支,叫做master分支.新建分支的步骤:右键项目→Git→Repository...→Branches... master分支应该是最稳定的,开发的时候,建 ...

  7. MySQL加密

    MySQL字段加密和解密 1.加密:aes_encrypt('admin','key') 解密:aes_decrypt(password,'key') 2.双向加密 通过密钥去加密,解密的时候的只有知 ...

  8. 归并排序的java实现

    归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...

  9. CentOS 7 上部署Mono 4 和Jexus 5.6

    概述 在这篇文章中我们将讨论如何在CentOS 7操作系统,安装 jexus. mono 和 配置 jexus,因此它将能够在这种环境中运行一个asp.net mvc 4 应用.这篇文章是描述如何在 ...

  10. Mac-OSX的Python3.5虚拟环境下安装Opencv

    Mac-OSX的Python3.5虚拟环境下安装Opencv 1   关键词 关键词:Mac,OSX,Python3.5,Virtualenv,Opencv 2   概述 本文是一篇 环境搭建 的基础 ...