Assertor用于判断参数和抛出异常
代码
/// <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用于判断参数和抛出异常的更多相关文章
- 一个diff工具,用于判断两个目录下所有的改动(比较新旧版本文件夹)
需求: 编写一个diff工具,用于判断两个目录下所有的改动 详细介绍: 有A和B两个目录,目录所在位置及层级均不确定 需要以B为基准找出两个目录中所有有改动的文件(文件或内容增加.修改.删除),将有改 ...
- python 反射机制 ( 广泛应用于URL参数)
web实例 考虑有这么一个场景,根据用户输入的url的不同,调用不同的函数,实现不同的操作,也就是一个url路由器的功能,这在web框架里是核心部件之一.下面有一个精简版的示例: 首先,有一个comm ...
- Attribute注解(用于判断权限)
一 Attribute原理: Attribute注解,是附加上方法.属性.类等上面的标签,可以通过方法的GetCustomAttribute获得粘贴的这个Attribute对象通过反射调用到粘贴到属 ...
- stop() 是用于停止动画 :animated 用于判断动画是否在进行中
stop() 是用于停止动画 if($("element").is(":animated")) 用于判断动画是否在进行中
- JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内
/* *JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内 *@param date1 date2(形如:'2015-01-01'类 ...
- obj.getClass() == Person.class 用于判断类型
obj.getClass() == Person.class 用于判断类型
- 这是一个用于判断IE浏览器版本的紧凑脚本
这是一个用于判断IE浏览器版本的紧凑脚本IE浏览器,不管它们是什么版本,总是与Web标准有些不兼容.对于编码人员来说,这很困难.为了考虑IE的兼容性,不管它是写CSS还是写JS,IE通常都会被特殊处理 ...
- instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。
http://lavasoft.blog.51cto.com/62575/79864/ 深入Java关键字instanceof 2008-06-02 07:50:43 标签:Java 关键字 休 ...
- jQuery.isEmptyObject()函数用于判断指定参数是否是一个空对象。
jquery中有一个函数isEmptyObject()用来判断制定参数是否是一个空对象. 示例如下: function isEmptyObject(e) { var t; for (t in e) r ...
随机推荐
- 恢复SQL Server被误删除的数据(再扩展)
恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...
- JavaScript 中的数据类型
Javascript中的数据类型有以下几种情况: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Function,Date,Ar ...
- 协议森林17 我和你的悄悄话 (SSL/TLS协议)
作者:Vamei 出处:http://www.cnblogs.com/vamei 转载请先与我联系. TLS名为传输层安全协议(Transport Layer Protocol),这个协议是一套加密的 ...
- javascript:逆波兰式表示法计算表达式结果
逆波兰式表示法,是由栈做基础的表达式,举个例子: 5 1 2 + 4 * + 3 - 等价于 5 + ((1 + 2) * 4) - 3 原理:依次将5 1 2 压入栈中, 这时遇到了运算符 + ...
- javascript函数
array.sort(function(a, b){ return a -b ; } ) 把数组 array 按照从小到大排序. [11, 22, 586, 10, -58, 86].sort(f ...
- Node.js入门(一)
一.Node.js本质上是js的运行环境. 二.可以解析js代码(没有浏览器安全级的限制): 提供系统级的API:1.文件的读写 2.进程的管理 3.网络通信 三.可以关注的四个网站: 1.https ...
- Windows Server 2008 R2 下配置TLS1.2,添加自签名证书
前言 2017年1月1日起App Store上的所有App应用将强制开启ATS功能. 苹果的ATS(App Transport Security)对服务器硬性3点要求: ① ATS要求TLS1.2或者 ...
- 谈谈document.ready和window.onload的区别
在Jquery里面,我们可以看到两种写法:$(function(){}) 和$(document).ready(function(){}) 这两个方法的效果都是一样的,都是在dom文档树加载完之后执行 ...
- 绿色版的Linux.NET——“Jws.Mono”(续)
在前一篇文章中,我们简略的介绍了jws.mono的安装使用,以及我们如何自己动手做一个jws.mono出来. 在文章发表之后的几天里,我一直觉得有点不妥之处,直到后来猛然的意识到:我们自己动手做的jw ...
- Ubuntu14.04配置Mono+Jexus
总所周知,ASP.NET是微软公司的一项技术,是一个网站服务端开发的一种技术,它可以在通过HTTP请求文档时再在Web服务器上动态创建它们,就是所谓动态网站开发,它依赖运行于 IIS 之中的程序 .但 ...