using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Znyc.Recruitment.Admin.Commons.Properties;
namespace Znyc.Recruitment.Admin.Commons.Extensions
{
///
/// 用于参数检查的扩展方法
///
public static class ParameterCheckExtensions
{
///
/// 验证指定值的断言是否为真,如果不为真,抛出指定消息的指定类型
/// 异常
///
/// 异常类型
/// 要验证的断言。
/// 异常消息。
private static void Require(bool assertion, string message) where TException : Exception
{
if (assertion)
{
return;
}
if (string.IsNullOrEmpty(message))
{
throw new ArgumentNullException("message");
}
TException exception = (TException)Activator.CreateInstance(typeof(TException), message);
throw exception;
}
///
/// 验证指定值的断言表达式是否为真,不为值抛出异常
///
///
/// 要验证的断言表达式
/// 异常消息
public static void Required(this T value, Func assertionFunc, string message)
{
if (assertionFunc == null)
{
throw new ArgumentNullException("assertionFunc");
}
Require(assertionFunc(value), message);
}
///
/// 验证指定值的断言表达式是否为真,不为真抛出异常
///
/// 要判断的值的类型
/// 抛出的异常类型
/// 要判断的值
/// 要验证的断言表达式
/// 异常消息
public static void Required(this T value, Func assertionFunc, string message)
where TException : Exception
{
if (assertionFunc == null)
{
throw new ArgumentNullException("assertionFunc");
}
Require(assertionFunc(value), message);
}
///
/// 检查参数不能为空引用,否则抛出异常。
///
///
/// 参数名称
///
public static void CheckNotNull(this T value, string paramName) where T : class
{
Require(value != null, string.Format(Resources.ParameterCheck_NotNull, paramName));
}
///
/// 检查字符串不能为空引用或空字符串,否则抛出异常或异常。
///
///
/// 参数名称。
///
///
public static void CheckNotNullOrEmpty(this string value, string paramName)
{
value.CheckNotNull(paramName);
Require(value.Length > 0,
string.Format(Resources.ParameterCheck_NotNullOrEmpty_String, paramName));
}
///
/// 检查Guid值不能为Guid.Empty,否则抛出异常。
///
///
/// 参数名称。
///
public static void CheckNotEmpty(this Guid value, string paramName)
{
Require(value != Guid.Empty,
string.Format(Resources.ParameterCheck_NotEmpty_Guid, paramName));
}
///
/// 检查集合不能为空引用或空集合,否则抛出异常或异常。
///
/// 集合项的类型。
///
/// 参数名称。
///
///
public static void CheckNotNullOrEmpty(this IEnumerable collection, string paramName)
{
collection.CheckNotNull(paramName);
Require(collection.Any(),
string.Format(Resources.ParameterCheck_NotNullOrEmpty_Collection, paramName));
}
///
/// 检查参数必须小于[或可等于,参数canEqual]指定值,否则抛出异常。
///
/// 参数类型。
///
/// 参数名称。
/// 要比较的值。
/// 是否可等于。
///
public static void CheckLessThan(this T value, string paramName, T target, bool canEqual = false)
where T : IComparable
{
bool flag = canEqual ? value.CompareTo(target) <= 0 : value.CompareTo(target) < 0;
string format = canEqual ? Resources.ParameterCheck_NotLessThanOrEqual : Resources.ParameterCheck_NotLessThan;
Require(flag, string.Format(format, paramName, target));
}
///
/// 检查参数必须大于[或可等于,参数canEqual]指定值,否则抛出异常。
///
/// 参数类型。
///
/// 参数名称。
/// 要比较的值。
/// 是否可等于。
///
public static void CheckGreaterThan(this T value, string paramName, T target, bool canEqual = false)
where T : IComparable
{
bool flag = canEqual ? value.CompareTo(target) >= 0 : value.CompareTo(target) > 0;
string format = canEqual
? Resources.ParameterCheck_NotGreaterThanOrEqual
: Resources.ParameterCheck_NotGreaterThan;
Require(flag, string.Format(format, paramName, target));
}
///
/// 检查参数必须在指定范围之间,否则抛出异常。
///
/// 参数类型。
///
/// 参数名称。
/// 比较范围的起始值。
/// 比较范围的结束值。
/// 是否可等于起始值
/// 是否可等于结束值
///
public static void CheckBetween(this T value, string paramName, T start, T end, bool startEqual = false,
bool endEqual = false)
where T : IComparable
{
bool flag = startEqual ? value.CompareTo(start) >= 0 : value.CompareTo(start) > 0;
string message = startEqual
? string.Format(Resources.ParameterCheck_Between, paramName, start, end)
: string.Format(Resources.ParameterCheck_BetweenNotEqual, paramName, start, end, start);
Require(flag, message);
flag = endEqual ? value.CompareTo(end) <= 0 : value.CompareTo(end) < 0;
message = endEqual
? string.Format(Resources.ParameterCheck_Between, paramName, start, end)
: string.Format(Resources.ParameterCheck_BetweenNotEqual, paramName, start, end, end);
Require(flag, message);
}
///
/// 检查指定路径的文件夹必须存在,否则抛出异常。
///
///
/// 参数名称。
///
///
public static void CheckDirectoryExists(this string directory, string paramName = null)
{
CheckNotNull(directory, paramName);
Require(Directory.Exists(directory),
string.Format(Resources.ParameterCheck_DirectoryNotExists, directory));
}
///
/// 检查指定路径的文件必须存在,否则抛出异常。
///
///
/// 参数名称。
/// 当文件路径为null时
/// 当文件路径不存在时
public static void CheckFileExists(this string filename, string paramName = null)
{
CheckNotNull(filename, paramName);
Require(File.Exists(filename),
string.Format(Resources.ParameterCheck_FileNotExists, filename));
}
}
}