对String进行类型验证的帮助类

在工作中经常会遇到 验证String 中的值是否属于Int型或者是Bool又或是Date

一般的做法是用方法 类型.TryParse(string,类型) 来做验证.

string strValue = "123";

int intValue;

bool isInt = int.TryParse(strValue, out intValue);

但是使用此方法需要创建一个该类型的变量.我工作中写的是WEB程序经常一个页面要验证来自前台的值类型有10几个,这样就略显有点麻烦了. 因为我们只要判断下string的值是不是这个类型就好.

我发现这个TryParse方法基本 bool int date 这些类型都会存在 但是查找了下他们的接口里均没有此方法.又查询了一遍IConvertible接口子类发现所有子类均存在此方法

于是就用想法给String 加上一个名为 Is的扩展方法

因为 TryParse 方法不是实现接口定义的。而C#系统类库中实现IConvertible接口的几乎都有TryParse 方法我们就定义类型T是继承IConvertible的;

但也有可能类型T没有TryParse 方法或者方法签名不是string,out T

这种情况下我们抛出一个自定义异常 TryParseException

还有一点要注意使用反射查找 TryParse 方法时指定方法的参数类型为 {typeof(string),typeof(T)}查询结果是NULL 因为 TryParse 的第二个参数声明是 out 的,要使用{typeof(string),typeof(T).MakeByRefType()}才能查找到该方法

/// <summary>
/// TypeValidate 的摘要说明
/// </summary>
public static class TypeValidate
{
    /// <summary>
    /// 类型T必须具备
    /// (1)无参构造方法
    /// (2)方法签名为 bool TryParse(string,T)的方法
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="value"></param>
    /// <returns></returns>
    [SecuritySafeCritical]
    public static bool Is<T>(this string value) where T : IConvertible
    {
        var type = typeof(T);
        Type[] types = { typeof(string), type.MakeByRefType() };
        var Method = type.GetMethod("TryParse", types);
        if (Method == null)
        {
            throw new TryParseException();
        }
        try
        {
            T Convertible = Activator.CreateInstance<T>();
            return (bool)Method.Invoke(Convertible, new object[] { value, Convertible });
        }
        catch
        {
            throw new TryParseException();
        }
    }
}
/// <summary>
/// 类型没有方法 TryParse 或 没有无参构造方法 或没有方法签名 bool TryParse(String,T)的方法
/// </summary>
public class TryParseException : Exception
{
}

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/net/

这个帮助类就算是完成了 我们来试下效果吧!

测试代码

Response.Write(string.Format("12131312 Is int ={0}<br/>", "12131312".Is<int>()));
        Response.Write(string.Format("121313123131231 Is int ={0}<br/>", "121313123131231".Is<int>()));
        Response.Write(string.Format("1231231231313123 Is int ={0}<br/>", "1231231231313123".Is<int>()));
        Response.Write(string.Format("adadasda Is int ={0}<br/>", "adadasda".Is<int>()));
        Response.Write(string.Format("true Is bool ={0}<br/>", "true".Is<bool>()));
        Response.Write(string.Format("1 Is bool ={0}<br/>", "1".Is<bool>()));
        Response.Write(string.Format("2013/4/5 06:06:06 Is Date ={0}<br/>", "2013/4/5 06:06:06".Is<DateTime>()));

结果

12131312 Is int =True
121313123131231 Is int =False
1231231231313123 Is int =False
adadasda Is int =False
true Is bool =True
1 Is bool =False
2013/4/5 06:06:06 Is Date =True

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索string
, 方法
, 类型
, response
, bool
, string类型
, is
string类型的方法
string类型、string转date类型、string是什么类型、java string类型、c string类型,以便于您获取更多的相关知识。

时间: 2025-01-02 21:45:47

对String进行类型验证的帮助类的相关文章

C# 验证识别基类

原文 C# 验证识别基类 网上找了些代码 自己又改了下 先放出来了 处理简单的验证码足够了 001 using System; 002 using System.Collections.Generic; 003 using System.Linq; 004 using System.Text; 005 using System.Drawing; 006 using System.Drawing.Imaging; 007 using System.Runtime.InteropServices;

Javascript类型系统之String字符串类型详解_javascript技巧

javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串String是javascript基本数据类型,同时javascript也支持String对象,它是一个原始值的包装对象.在需要时,javascript会自动在原始形式和对象形式之间转换.本文将介绍字符串String原始类型及String包装对象 定义 字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列 字符串类型常被用于表示文本数据,此时字符串中的

我在C#后台中获取了数据库表中我需要的字段的值(是以string的类型取出来的),然后我已经将这些值进行了操作,得到了新的数据(string类型)将得到的新数据

问题描述 我在C#后台中获取了数据库表中我需要的字段的值(是以string的类型取出来的),然后我已经将这些值进行了操作,得到了新的数据(string类型)将得到的新数据插入到数据库中怎么做(要用存储过程做),求大神指教,最好能给我点代码参考. 解决方案 解决方案二:...数据库基础insert和update解决方案三:不就是普通的插入更新操作吗,msdn上都有示例代码解决方案四:参考实例:intid=0;//使用存储过程实现添加数据//proc_AddUser为存储过程名称using(SqlC

string数组类型转换为int数组(数组类型之间的转换)

string数组类型转换为int数组.方法一:ConvertAll的用法 1 public static int StrToInt(string str)2 {3 return int.Parse(str);4 }5 6 string[] arrs = new string[] { "100", "300", "200" };7 int[] arri = Array.ConvertAll(arrs,

PHP 基于文件头的文件类型验证类函数_php实例

我这里写了一个验证类,是通过文件头来判断文件格式.(也不是百分之百安全,如果用户伪造了文件头,也能通过验证) 复制代码 代码如下: <?php /** * 检证文件类型类 * * @author Silver */ class FileTypeValidation { // 文件类型,不同的头信息 private static $_fileFormats = Array( 'jp2' => '0000000C6A502020',<br/> '3gp' => '00000020

辨析Java中的String与StringBuffer及StringBuilder字符串类_java

1 StringString:字符串常量,字符串长度不可变. 2 StringBufferStringBuffer:字符串变量(Synchronized,即线程安全).如果要频繁对字符串内容进行修改,出于效率考虑最好使用StringBuffer,如果想转成String类型,可以调用StringBuffer的toString()方法. Java.lang.StringBuffer线程安全的可变字符序列.在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容.可将字符

详解Swift中的Characters字符类型与String字符串类型_Swift

一.引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础 在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过下面两种方式来创建空字符串: let str1 = "&qu

C#中string与byte[]的转换帮助类

转换 在写C#程序时,string和byte[]之间的转换比较烦,在移植一些老程序时感觉很不好.我在C#中使用DES和TripleDES时移植一块老代码时也遇到了同样的情况.为了下次不为同样的事情烦恼,就写了下面的帮助类. 主要实现了以下的函数 代码中出现的Sidle是我的网名. /** @Author WuErPing* @Version 1.0* @Date 2004/11/30* @Description: */using System;using System.Text;namespac

新浪微博应用类型应该选择“展示类”还是“管理类”?

  如果是只有后台管理,无须前台展示的应用,请选择应用类型为"管理类应用".否则请设置为"展示类应用".此项设置重要,设置错误可能导致相关功能异常. 管理类应用如果错误设置为展示类应用,那么机构就有可能安装后将应用显示在前台,被企业的粉丝看到,造成安全问题. 展示类应用如果错误设置为管理类应用, 那么机构将无法将应用显示在前台展示给企业的粉丝.该项设置变更后不会即时生效,有1小时的缓存期限.个性化应用一般情况下请都设置为"展示类".