在调用方法的时候我们需要对输入参数进行验证,譬如非空,只能数字类型等;
一些参数验证都是非常通用的,所以可以累积后续不断完善;
这种写法源于之前很早看到一篇博客后续完善,具体地址忘记了,所以现在Github项目采用协议:MIT,非常抱歉;
GitHub地址:MasterChief 参数验证代码
欢迎Star,欢迎Issues;
1. 代码实现
using System;
using System.IO;
using System.Text.RegularExpressions;
using MasterChief.DotNet4.Utilities.Common;
using MasterChief.DotNet4.Utilities.Model;
namespace MasterChief.DotNet4.Utilities.Operator
{
/// <summary>
/// 参数验证帮助类
/// </summary>
public static class ValidateOperator
{
#region Methods
/// <summary>
/// 验证初始化
/// </summary>
/// <returns>Validation</returns>
public static Validation Begin()
{
return null;
}
/// <summary>
/// 需要验证的正则表达式
/// </summary>
/// <param name="validation">Validation</param>
/// <param name="checkFactory">委托</param>
/// <param name="pattern">正则表达式</param>
/// <param name="argumentName">参数名称</param>
/// <returns>Validation</returns>
public static Validation Check(this Validation validation, Func<bool> checkFactory, string pattern,
string argumentName)
{
return Check<ArgumentException>(validation, checkFactory,
string.Format(ValidateResource.ParameterCheck_Match2, argumentName));
}
/// <summary>
/// 自定义参数检查
/// </summary>
/// <typeparam name="TException">泛型</typeparam>
/// <param name="validation">Validation</param>
/// <param name="checkedFactory">委托</param>
/// <param name="message">自定义错误消息</param>
/// <returns>Validation</returns>
/// 时间:2016/7/19 11:37
/// 备注:
public static Validation Check<TException>(this Validation validation, Func<bool> checkedFactory,
string message)
where TException : Exception
{
if (checkedFactory())
return validation ?? new Validation
{
IsValid = true
};
var exception = (TException) Activator.CreateInstance(typeof(TException), message);
throw exception;
}
/// <summary>
/// 检查指定路径的文件夹必须存在,否则抛出<see cref="DirectoryNotFoundException" />异常。
/// </summary>
/// <param name="validation">Validation</param>
/// <param name="data">判断数据</param>
/// <exception cref="ArgumentNullException">ArgumentNullException</exception>
/// <exception cref="DirectoryNotFoundException">DirectoryNotFoundException</exception>
/// <returns>Validation</returns>
public static Validation CheckDirectoryExist(this Validation validation, string data)
{
return Check<DirectoryNotFoundException>(validation, () => Directory.Exists(data),
string.Format(ValidateResource.ParameterCheck_DirectoryNotExists, data));
}
/// <summary>
/// 检查文件类型
/// </summary>
/// <param name="validation">Validation</param>
/// <param name="actualFileExt">实际文件类型;eg: .xls</param>
/// <param name="expectFileExt">期待文件类型</param>
/// <returns></returns>
public static Validation CheckedFileExt(thi