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 == 0)
{
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 == 0)
{
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) < 0 || value.CompareTo(max) > 0)
{
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) < 0 || value.CompareTo(max) > 0)
{
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 < 5 || code > 15)
{
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

时间: 2024-10-06 02:34:41

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

linux之if语句内判断参数

bash测试之文件测试: -f :测试其是否为普通文件,即ls –l时文件类型为-的文件 -d: 测试其是否为目录文件,即ls -l时文件类型为d的文件: -e: 测试文件是否存在:存在为真,否则为假: -r: 测试文件对当前用户来说是否可读: -w: 测试文件对当前用户来说是否可写: -x: 测试文件对当前用户来说是否可执行: -s: 测试文件大小是否不空,不空则真,空则假: -c:测试文件是否为字符文件   bash条件测试: 整数测试:   大于 :-gt 小于 :-lt 等于 :-eq

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

需求: 编写一个diff工具,用于判断两个目录下所有的改动 详细介绍: 有A和B两个目录,目录所在位置及层级均不确定 需要以B为基准找出两个目录中所有有改动的文件(文件或内容增加.修改.删除),将有改动的文件放入第三个目录中,层级结构与原目录相同 将所有新增与更新信息记录到更新日志文件中 将删除信息单独记录到删除日志文件中 每次执行diff工具需要生成一个新的以日期命名的目录存放文件 使用场景: 本工具用于软件版本升级时找出两个版本间所有修改过的文件,便于增量替换. 提示:    使用CRC判断

【安卓】判断&quot;全新安装初次打开、升级后初次打开、第二次打开&quot;,比如可用于判断是否应显示&quot;引导页&quot;、!

思路: 1.基于SharedPreferences,每次打开时,根据上次打开时记录的版本即可区分此次打开的情形. StoredData.java: 1.Application.onCreate中调用StoredData.getThis().markOpenApp();即可.其他位置就可以根据getLaunchMode判断打开类型了. package com.example.test; import android.app.Application; import android.content.S

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

/* *JS时间戳比较大小:对于一组时间戳(开始时间~结束时间)和另一组时间戳进行比较,用于判断被比较时间戳组是否在要求范围内 *@param date1 date2(形如:'2015-01-01'类型字符串) */ function compareDate(date1,date2){ //对获得的时间戳区间与既定的时间戳进行比对 var baseDate1='2015-01-01'; var baseDate2='2015-03-31'; baseDate1=new Date(baseDate

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

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

javascript判断参数是否为dom元素

需求场景: 有时候需要判断参数传入是否为dom元素,或者需要区分参数是dom元素还是非dom元素,就需要做区分判断.举例:一个扩展方法MyMethod(domArg,optionsArg):参数可以选传入(假设内部均有默认处理),那对于判断参数domArg是否为dom元素就有意义了.   分析代码如下: function IsDom(obj){var isDOM = ( typeof HTMLElement === 'object' ) ? obj instanceof HTMLElement

jstl 判断字符串是否为空C标签 &lt;c:if&gt;判断参数是否为空

C标签 <c:if>判断参数是否为空 <c:if test="${empty str}" > str为空 </c:if> <c:if test="${not empty str}"> str不为空 </c:if> ********************************************* <c:forEach var="menu" items="${ser

判断参数并赋予默认值

一个有用的code,判断用户给的参数(UserEnterFile)是否存在,如果不存在则用(EnterNothing)作为默认值 filename=${UserEnterFile:-"EnterNothing"}

shell 编程中使用到得if语句内判断参数

http://blog.chinaunix.net/uid/21411227/cid-63616-list-1.html 1.判断文件类型   –b 当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当pathname指定的文件或目录存在时返回真 -f 当file存在并且是正规文件时返回真 -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h 当file存在并且是符号链接文件时返