代码

/// <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. 基于spring注解AOP的异常处理

    一.前言 项目刚刚开发的时候,并没有做好充足的准备.开发到一定程度的时候才会想到还有一些问题没有解决.就比如今天我要说的一个问题:异常的处理.写程序的时候一般都会通过try...catch...fin ...

  2. DynamicObject - 代理对象的种类

    开箱即用,DynamicProxy提供了多种代理对象,主要分成两个大类: 基于继承(Inheritance-based) 基于继承的代理是通过继承一个代理类来实现,代理拦截对类的虚(virtual)成 ...

  3. C#基础篇 - 理解委托和事件

    1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具有相同签名方法的函数指针.简单理解,委托是一种可以把函数当做参数传递的类型.很多情况下,某 ...

  4. js学习之类型识别

    用来判别类型的方法有好多,整理了一下4种方法,平时用的时候,在不同情景下,还是要结合着使用的. 方法一 typeof:可以识别标准类型,除了Null:不能识别具体的对象类型,除了Function &l ...

  5. IdentityServer4 使用OpenID Connect添加用户身份验证

    使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...

  6. AlloyTouch实战--60行代码搞定QQ看点资料卡

    原文链接:https://github.com/AlloyTeam/AlloyTouch/wiki/kandian 先验货 访问DEMO你也可以点击这里 源代码可以点击这里 如你体验所见,流程的滚动的 ...

  7. Missing Push Notification Entitlement 问题

    最近打包上传是遇到一个问题: 描述: Missing Push Notification Entitlement - Your app includes an API for Apple's Push ...

  8. 从零自学Hadoop(22):HBase协处理器

    阅读目录 序 介绍 Observer操作 示例下载 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,Sour ...

  9. SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效

    只要根据错误提示,找到相应文件夹下的\obj\Debug文件夹下的 相应名字.csproj.FileListAbsolute.txt, 打开并删除含有'<<<<<< ...

  10. 【每日一linux命令1】linux命令路径

    一.路径: 执行命令前必须要考虑的一步是命令的路径,若是路径错误或是没有正确的指定,可能导致错误 的执行或是找不到该命令.要知道设置的路径,可执行以下命令: echo $PATH 显示结果: 这时我们 ...