C#、ASP.NET通用扩展工具类之TypeParse

用法:

var int1 = "2".TryToInt();//转换为int失败返回0
var int2 = "2x".TryToInt();
var int3 = "2".TryToInt(1);//转换为int失败返回1
var int4 = "2x".TryToInt(1);

var d1 = "2".TryToMoney(); //同上
var d2 = "2x".TryToMoney();
var d3 = "2".TryToMoney(1);
var d4 = "2x".TryToMoney(1);

string a = null;
var s1 = a.TryToString();
var s3 = a.TryToString("1");

var d11 = "2".TryToDecimal();
var d22 = "2x".TryToDecimal();
var d33 = "2".TryToDecimal(1);
var d44 = "2x".TryToDecimal(1);

var de1 = "2013-1-1".TryToDate();
var de2 = "x2013-1-1".TryToDate();
var de3 = "x2013-1-1".TryToDate(DateTime.Now);

//json和model转换
var json = new { id = 1 }.ModelToJson();
var model = "{id:1}".JsonToModel<ModelTest>();

//list和dataTable转换
var dt = new List<ModelTest>().ListToDataTable();
var list = dt.DataTableToList<ModelTest>();

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Script.Serialization;
using System.Data;
using System.Reflection;
using System.Collections;

namespace SyntacticSugar
{
  /// <summary>
  /// ** 描述:类型转换
  /// ** 创始时间:2015-6-2
  /// ** 修改时间:-
  /// ** 作者:sunkaixuan
  /// ** 使用说明:
  /// </summary>
  public static class TypeParseExtenions
  {
    #region 强转成int 如果失败返回 0
    /// <summary>
    /// 强转成int 如果失败返回 0
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="i"></param>
    /// <returns></returns>
    public static int TryToInt(this object thisValue)
    {
      int reval = 0;
      if (thisValue != null && int.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return reval;
    }
    #endregion
    #region 强转成int 如果失败返回 errorValue
    /// <summary>
    /// 强转成int 如果失败返回 errorValue
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="i"></param>
    /// <returns></returns>
    public static int TryToInt(this object thisValue, int errorValue)
    {
      int reval = 0;
      if (thisValue != null && int.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return errorValue;
    }
    #endregion
    #region 强转成double 如果失败返回 0
    /// <summary>
    /// 强转成money 如果失败返回 0
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="i"></param>
    /// <returns></returns>
    public static double TryToMoney(this object thisValue)
    {
      double reval = 0;
      if (thisValue != null && double.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return 0;
    }
    #endregion
    #region 强转成double 如果失败返回 errorValue
    /// <summary>
    /// 强转成double 如果失败返回 errorValue
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="errorValue"></param>
    /// <returns></returns>
    public static double TryToMoney(this object thisValue, int errorValue)
    {
      double reval = 0;
      if (thisValue != null && double.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return errorValue;
    }
    #endregion
    #region 强转成string 如果失败返回 ""
    /// <summary>
    /// 强转成string 如果失败返回 ""
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="i"></param>
    /// <returns></returns>
    public static string TryToString(this object thisValue)
    {
      if (thisValue != null) return thisValue.ToString().Trim();
      return "";
    }
    #endregion
    #region 强转成string 如果失败返回 errorValue
    /// <summary>
    /// 强转成string 如果失败返回 str
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="errorValue"></param>
    /// <returns></returns>
    public static string TryToString(this object thisValue, string errorValue)
    {
      if (thisValue != null) return thisValue.ToString().Trim();
      return errorValue;
    }
    #endregion
    #region 强转成Decimal 如果失败返回 0
    /// <summary>
    /// 强转成Decimal 如果失败返回 0
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="i"></param>
    /// <returns></returns>
    public static Decimal TryToDecimal(this object thisValue)
    {
      Decimal reval = 0;
      if (thisValue != null && decimal.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return 0;
    }
    #endregion
    #region 强转成Decimal 如果失败返回 errorValue
    /// <summary>
    /// 强转成Decimal 如果失败返回 errorValue
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="errorValue"></param>
    /// <returns></returns>
    public static Decimal TryToDecimal(this object thisValue, int errorValue)
    {
      Decimal reval = 0;
      if (thisValue != null && decimal.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return errorValue;
    }
    #endregion
    #region 强转成DateTime 如果失败返回 DateTime.MinValue
    /// <summary>
    /// 强转成DateTime 如果失败返回 DateTime.MinValue
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="i"></param>
    /// <returns></returns>
    public static DateTime TryToDate(this object thisValue)
    {
      DateTime reval = DateTime.MinValue;
      if (thisValue != null && DateTime.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return reval;
    }
    #endregion
    #region 强转成DateTime 如果失败返回 errorValue
    /// <summary>
    /// 强转成DateTime 如果失败返回 errorValue
    /// </summary>
    /// <param name="thisValue"></param>
    /// <param name="errorValue"></param>
    /// <returns></returns>
    public static DateTime TryToDate(this object thisValue, DateTime errorValue)
    {
      DateTime reval = DateTime.MinValue;
      if (thisValue != null && DateTime.TryParse(thisValue.ToString(), out reval))
      {
        return reval;
      }
      return errorValue;
    }
    #endregion

    #region json转换
    /// <summary>
    /// 将json序列化为实体
    /// </summary>
    /// <typeparam name="TEntity"></typeparam>
    /// <param name="json"></param>
    /// <returns></returns>
    public static TEntity JsonToModel<TEntity>(this string json)
    {
      JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
      return jsSerializer.Deserialize<TEntity>(json);
    }
    /// <summary>
    /// 将实体序列化为json
    /// </summary>
    /// <param name="model"></param>
    /// <returns></returns>
    public static string ModelToJson<T>(this T model)
    {
      JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
      return jsSerializer.Serialize(model);
    }

    #endregion

    #region DataTable List
    /// <summary>
    /// 将集合类转换成DataTable
    /// </summary>
    /// <param name="list">集合</param>
    /// <returns></returns>
    public static DataTable ListToDataTable<T>(this List<T> list)
    {
      DataTable result = new DataTable();
      if (list.Count > 0)
      {
        PropertyInfo[] propertys = typeof(T).GetProperties();
        foreach (PropertyInfo pi in propertys)
        {
          result.Columns.Add(pi.Name, pi.PropertyType);
        }

        for (int i = 0; i < list.Count; i++)
        {
          ArrayList tempList = new ArrayList();
          foreach (PropertyInfo pi in propertys)
          {
            object obj = pi.GetValue(list[i], null);
            if (obj != null && obj != DBNull.Value)
              tempList.Add(obj);
          }
          object[] array = tempList.ToArray();
          result.LoadDataRow(array, true);
        }
      }
      return result;
    }
    /// <summary>
    /// 将datatable转为list
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static List<T> DataTableToList<T>(this DataTable dt)
    {
      var list = new List<T>();
      Type t = typeof(T);
      var plist = new List<PropertyInfo>(typeof(T).GetProperties());

      foreach (DataRow item in dt.Rows)
      {
        T s = System.Activator.CreateInstance<T>();
        for (int i = 0; i < dt.Columns.Count; i++)
        {
          PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName);
          if (info != null)
          {
            if (!Convert.IsDBNull(item[i]))
            {
              info.SetValue(s, item[i], null);
            }
          }
        }
        list.Add(s);
      }
      return list;
    }
    #endregion

  }
}
(0)

相关推荐

  • C#、ASP.NET通用扩展工具类之LogicSugar

    说明一下性能方面 还可以接受 循环1000次普通Switch是用了0.001秒 ,扩展函数为0.002秒  , 如果是大项目在有负载均衡的情况下完全可以无视掉,小项目也不会计较这点性能了. 注意需要引用 "SyntacticSugar" 用法: //[Switch] string bookKey = "c#"; //以前写法 string myBook = ""; switch (bookKey) { case "c#": m

  • C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)

    好东西都需要人去整理.分类 注意:需要引用命名空间 SyntacticSugar 用法: /***扩展函数名细***/ //[IsInRange] int num = 100; //以前写法 if (num > 100 & num < 1000) { } //现在写法 if (num.IsInRange(100, 1000)) { } //datetime类型也支持 //[IsNullOrEmpty] object s = ""; //以前写法 if (s == n

  • C#、ASP.NET通用扩展工具类之TypeParse

    用法: var int1 = "2".TryToInt();//转换为int失败返回0 var int2 = "2x".TryToInt(); var int3 = "2".TryToInt(1);//转换为int失败返回1 var int4 = "2x".TryToInt(1); var d1 = "2".TryToMoney(); //同上 var d2 = "2x".TryToMo

  • java公众平台通用接口工具类HttpConnectUtil实例代码

    实例如下: package com.common.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ConnectException; import java.net.HttpURLConnection; import java.net.URL; import

  • asp的通用数据分页类

    (原创)<!--#include file="Conn.asp" --> 通用数据分页类     通用分页类,以后写分页显示数据时就轻松多啦.直接调用此类,然后再Execute即可以取得当前页的所有数据.     此类所做的工作是只取得当前页的数据,和总页数和总记录数等等数据. ASP代码: <% '/*****************************分页显示类************************** '/* 作者:哇哇鱼 '/* 日期:2004年

  • Asp.Net 通用数据操作类 (附通用数据基类)第1/2页

    文章内容为本站编辑,创作.你可以任意转载.发布.使用但请务必以明文标注文章原始出处及本声明 http://www.opent.cn  作者:浪淘沙此贴的方法会持续更新, 此文件要引用与数据操作的基类 using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.Web

  • Java实现Http工具类的封装操作示例

    本文实例讲述了Java实现Http工具类的封装操作.分享给大家供大家参考,具体如下: http工具类的实现:(通过apache包)第一个类 import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.ClientProtocolE

  • ASP.NET Core扩展库之Http通用扩展库的使用详解

    本文将介绍Xfrogcn.AspNetCore.Extensions扩展库对于Http相关的其他功能扩展,这些功能旨在处理一些常见需求, 包括请求缓冲.请求头传递.请求头日志范围.针对HttpClient与HttpRequestMessage.HttpResponseMessage的扩展方法. 一.开启服务端请求缓冲 ASP.NET Core 中请求体是不能多次读取的,由于在MVC中,框架已经读取过请求体,如果你在控制器中再次读取,将会引发异常,如下示例: [ApiController] [Ro

  • AbstractProcessor扩展MapStruct自动生成实体映射工具类

    目录 1 背景 2 现有技术 3 扩展设计 3.1 mapstruct 介绍 3.2 改进方案 4 实现 4.1 技术依赖 4.2 实现步骤 5 实践 5.1 引入依赖 5.2 对象定义 5.3 生成结果 5.4 Spring 容器引用 结语 1 背景 日常开发过程中,尤其在 DDD 过程中,经常遇到 VO/MODEL/PO 等领域模型的相互转换.此时我们会一个字段一个字段进行 set|get 设置.要么使用工具类进行暴力的属性拷贝,在这个暴力属性拷贝过程中好的工具更能提高程序的运行效率,反之引

  • asp.net中Log4.net的工具类helper

    一.Config文件配置 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler"/> </configSections>

  • ASP 三层架构 Error处理类

    从这节开始,将会给大家介绍几个ASP中的三大通用类,它贯穿于我所设计的三层架构中,是对ASP语法的扩展,可以提高很多细节处理上的效率,可以算是一点点框架的味道. 本节介绍错误处理类,类名Con_Error,在代码页面之初就进行初始化,实例名为e,以下的e.add 即使用该错误类的实例化对象进行操作. 方法介绍: e.Add(ByVal vErrorMessage ) 记录一个错误,并且设置 e.Error = true . 在程序检测用户名合法性等地方发现错误时,就调用这个方法,记录一个错误信息

随机推荐