public static class ConvertExtensions
{
#region 数据类型转换扩展方法
/// <summary>
/// object 转换成string 包括为空的情况
/// </summary>
/// <param name="obj"></param>
/// <returns>返回值不含空格</returns>
public static string ToStringEx(this object obj)
{
return obj == null ? string.Empty : obj.ToString().Trim();
} /// <summary>
/// 时间object 转换成格式化的string 包括为空的情况
/// </summary>
/// <param name="obj"></param>
/// <param name="format"></param>
/// <returns>返回值不含空格</returns>
public static string TryToDateTimeToString(this object obj, string format)
{
if (obj == null)
return string.Empty;
DateTime dt;
if (DateTime.TryParse(obj.ToString(), out dt))
return dt.ToString(format);
else
return string.Empty;
} /// <summary>
/// 字符转Int
/// </summary>
/// <param name="obj"></param>
/// <returns>成功:返回对应Int值;失败:返回0</returns>
public static int TryToInt32(this object obj)
{
int rel = 0; if (!string.IsNullOrEmpty(obj.ToStringEx()))
{
int.TryParse(obj.ToStringEx(), out rel);
}
return rel;
} /// <summary>
/// 字符转Int64
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static Int64 TryToInt64(this object obj)
{
Int64 rel = 0;
if (!string.IsNullOrEmpty(obj.ToStringEx()))
{
Int64.TryParse(obj.ToStringEx(), out rel);
}
return rel;
} /// <summary>
/// 字符转DateTime
/// </summary>
/// <param name="obj"></param>
/// <returns>成功:返回对应Int值;失败:时间初始值</returns>
public static DateTime TryToDateTime(this object obj)
{
DateTime rel = new DateTime();
if (!string.IsNullOrEmpty(obj.ToStringEx()))
{
DateTime.TryParse(obj.ToStringEx(), out rel);
}
return rel;
} /// <summary>
/// 转换成Json
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public static string TryToPostJson(this object obj)
{
string rel = string.Empty;
if (!string.IsNullOrEmpty(obj.ToStringEx()))
{
IsoDateTimeConverter iso = new IsoDateTimeConverter()
{
DateTimeFormat = "yyyy-MM-dd HH:mm:ss"
};
rel = JsonConvert.SerializeObject(obj, iso);
}
return rel;
}
#endregion #region DataTable转换成List集合
/// <summary>
/// DataTable转换成List集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> DataTableToList<T>(this DataTable dt) where T : new()
{
// 定义集合
IList<T> ts = new List<T>(); // 获得此模型的类型
Type type = typeof(T); foreach (DataRow dr in dt.Rows)
{
T t = new T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
string tempName = pi.Name; if (dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite) continue; object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
ts.Add(t);
}
return ts.CastTo<List<T>>();
}
#endregion #region List转换DataTable
/// <summary>
/// 将泛类型集合List类转换成DataTable
/// </summary>
/// <param name="entitys">泛类型集合</param>
/// <returns></returns>
public static DataTable ListToDataTable<T>(this List<T> entitys) where T : new()
{
//检查实体集合不能为空
if (entitys == null || entitys.Count < 1)
{
throw new Exception("需转换的集合为空");
}
//取出第一个实体的所有Propertie
Type entityType = entitys[0].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties(); //生成DataTable的structure
//生产代码中,应将生成的DataTable结构Cache起来,此处略
DataTable dt = new DataTable();
for (int i = 0; i < entityProperties.Length; i++)
{
//dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
dt.Columns.Add(entityProperties[i].Name);
}
//将所有entity添加到DataTable中
foreach (object entity in entitys)
{
//检查所有的的实体都为同一类型
if (entity.GetType() != entityType)
{
throw new Exception("要转换的集合元素类型不一致");
}
object[] entityValues = new object[entityProperties.Length];
for (int i = 0; i < entityProperties.Length; i++)
{
entityValues[i] = entityProperties[i].GetValue(entity, null);
}
dt.Rows.Add(entityValues);
}
return dt;
}
#endregion #region IList转成List<T>
/// <summary>
/// IList如何转成List<T>
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static List<T> IListToList<T>(this IList list) where T : new()
{
T[] array = new T[list.Count];
list.CopyTo(array, 0);
return new List<T>(array);
}
#endregion #region DataTable根据条件过滤表的内容
/// <summary>
/// 根据条件过滤表的内容
/// </summary>
/// <param name="dt"></param>
/// <param name="condition"></param>
/// <returns></returns>
public static DataTable GetNewDataTable(this DataTable dt, string condition)
{
if (!IsExistRows(dt))
{
if (condition.Trim() == "")
{
return dt;
}
else
{
DataTable newdt = new DataTable();
newdt = dt.Clone();
DataRow[] dr = dt.Select(condition);
for (int i = 0; i < dr.Length; i++)
{
newdt.ImportRow((DataRow)dr[i]);
}
return newdt;
}
}
else
{
return null;
}
}
#endregion #region 检查DataTable 是否有数据行
/// <summary>
/// 检查DataTable 是否有数据行
/// </summary>
/// <param name="dt">DataTable</param>
/// <returns></returns>
public static bool IsExistRows(this DataTable dt)
{
if (dt != null && dt.Rows.Count > 0)
return false; return true;
}
#endregion #region DataTable 转 DataTableToHashtable
/// <summary>
/// DataTable 转 DataTableToHashtable
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static Hashtable DataTableToHashtable(this DataTable dt)
{
Hashtable ht = new Hashtable();
foreach (DataRow dr in dt.Rows)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
string key = dt.Columns[i].ColumnName;
ht[key] = dr[key];
}
}
return ht;
}
#endregion #region DataTable/DataSet 转 XML
/// <summary>
/// DataTable 转 XML
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public static string DataTableToXml(this DataTable dt)
{
if (dt != null)
{
if (dt.Rows.Count > 0)
{
System.IO.StringWriter writer = new System.IO.StringWriter();
dt.WriteXml(writer);
return writer.ToString();
}
}
return String.Empty;
} /// <summary>
/// DataSet 转 XML
/// </summary>
/// <param name="ds"></param>
/// <returns></returns>
public static string DataSetToXml(this DataSet ds)
{
if (ds != null)
{
System.IO.StringWriter writer = new System.IO.StringWriter();
ds.WriteXml(writer);
return writer.ToString();
}
return String.Empty;
}
#endregion #region 将byte[]转换成int
/// <summary>
/// 将byte[]转换成int
/// </summary>
/// <param name="data">需要转换成整数的byte数组</param>
public static int BytesToInt32(this byte[] data)
{
//如果传入的字节数组长度小于4,则返回0
if (data.Length < 4)
{
return 0;
} //定义要返回的整数
int num = 0; //如果传入的字节数组长度大于4,需要进行处理
if (data.Length >= 4)
{
//创建一个临时缓冲区
byte[] tempBuffer = new byte[4]; //将传入的字节数组的前4个字节复制到临时缓冲区
Buffer.BlockCopy(data, 0, tempBuffer, 0, 4); //将临时缓冲区的值转换成整数,并赋给num
num = BitConverter.ToInt32(tempBuffer, 0);
} //返回整数
return num;
}
#endregion #region 补足位数
/// <summary>
/// 指定字符串的固定长度,如果字符串小于固定长度,
/// 则在字符串的前面补足零,可设置的固定长度最大为9位
/// </summary>
/// <param name="text">原始字符串</param>
/// <param name="limitedLength">字符串的固定长度</param>
public static string RepairZero(this string text, int limitedLength)
{
//补足0的字符串
string temp = ""; //补足0
for (int i = 0; i < limitedLength - text.Length; i++)
{
temp += "0";
} //连接text
temp += text; //返回补足0的字符串
return temp;
} /// <summary>
/// 小时、分钟、秒小于10补足0
/// </summary>
/// <param name="text">原始字符串</param>
/// <returns></returns>
public static string RepairZero(this int text)
{
string res = string.Empty;
if (text >= 0 && text < 10)
{
res += "0" + text;
}
else
{
res = text.ToString();
}
return res;
} #endregion #region 各进制数间转换
/// <summary>
/// 实现各进制数间的转换。ConvertBase("15",10,16)表示将十进制数15转换为16进制的数。
/// </summary>
/// <param name="value">要转换的值,即原值</param>
/// <param name="from">原值的进制,只能是2,8,10,16四个值。</param>
/// <param name="to">要转换到的目标进制,只能是2,8,10,16四个值。</param>
public static string ConvertBase(this string value, int from, int to)
{
try
{
int intValue = Convert.ToInt32(value, from); //先转成10进制
string result = Convert.ToString(intValue, to); //再转成目标进制
if (to == 2)
{
int resultLength = result.Length; //获取二进制的长度
switch (resultLength)
{
case 7:
result = "0" + result;
break;
case 6:
result = "00" + result;
break;
case 5:
result = "000" + result;
break;
case 4:
result = "0000" + result;
break;
case 3:
result = "00000" + result;
break;
}
}
return result;
}
catch
{ //LogHelper.WriteTraceLog(TraceLogLevel.Error, ex.Message);
return "0";
}
}
#endregion #region 使用指定字符集将string转换成byte[]
/// <summary>
/// 使用指定字符集将string转换成byte[]
/// </summary>
/// <param name="text">要转换的字符串</param>
/// <param name="encoding">字符编码</param>
public static byte[] StringToBytes(this string text, Encoding encoding)
{
return encoding.GetBytes(text);
}
#endregion #region 使用指定字符集将byte[]转换成string
/// <summary>
/// 使用指定字符集将byte[]转换成string
/// </summary>
/// <param name="bytes">要转换的字节数组</param>
/// <param name="encoding">字符编码</param>
public static string BytesToString(this byte[] bytes, Encoding encoding)
{
return encoding.GetString(bytes);
}
#endregion
}

  

C#常用处理数据类型转换、数据源转换、数制转换、编码转换相关的扩展的更多相关文章

  1. SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作

    原文:SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作 上期回顾: SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能 在抽取各种应用的数据时候,经常会遇到数据需要转 ...

  2. Linux下查看文件编码,文件编码格式转换和文件名编码转换

    linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编 ...

  3. Python常用的数据类型转换

    在实际开发中.经常要根据需求来转变一些变量的类型. 需要用到以下函数:

  4. Python常用数据类型转换

    常用的数据类型转换 目标 了解类型转换的作用 掌握常用的类型转换 函数 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ...

  5. python运算符和常用数据类型转换

    运算符 算术运算符 运算符 描述 实例 + 加 两个对象相加 a + b 输出结果 30 - 减 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 两个数相乘或是返回一个被重复若干 ...

  6. Java基础知识强化22:Java中数据类型转换

    数据类型转换: (1). 自动转换 低级变量可以直接转换为高级变量,这叫自动类型转换.比如: byte b: int b:  long b:  float b:   double  b: 上面的语句可 ...

  7. JavaScript的数据类型转换

    首先,由于JavaScript是弱类型语言(弱类型的语言的东西没有明显的类型,他能随着环境的不同,自动变换类型而强类型则没这样的规定,不同类型间的操作有严格定义,只有相同类型的变量才能操作,虽然系统也 ...

  8. 简谈-Python的输入、输出、运算符、数据类型转换

    输出: 格式化输出: 看到了 % 这样的操作符,这就是Python中格式化输出. 换行输出: 在输出的时候,如果有 \n 那么,此时 \n 后的内容会在另外一行显示 输入: 在python2.7当中, ...

  9. JS 数据类型转换以其他

    JavaScript 是一种弱类型的语言,也就是没有类型限制,变量可以随时被赋予任意值. 同时,在程序运行过程中,类型会被自动确认的.因此,这就是涉及到数据的类型转换.在 JS 的世界中,数据类型转换 ...

随机推荐

  1. [2019HDU多校第一场][HDU 6590][M. Code]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6590 题目大意(来自队友):二维平面上有\(n\)个点,每个点要么是黑色要么是白色,问能否找到一条直线 ...

  2. hdu 5187 zhx's contest (快速幂+快速乘)

    zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) To ...

  3. 「CF724G」Xor-matic Number of the Graph「线性基」

    题意 求所有点对\(u,v\),\(u\)到\(v\)所有不同的异或路径的异或值之和,对\(10^9+7\)取模 题解 求出一个dfs树,那么\(u\)到\(v\)的路径一定是树上路径异或一些环.这些 ...

  4. [Vue] : Vue实例的声明周期

    vue实例的生命周期 什么是生命周期:从Vue实例创建.运行.到销毁期间,总是伴随着各种各样的事件,这些事件,统称为生命周期! 生命周期钩子:就是生命周期事件的别名而已: 生命周期钩子 = 生命周期函 ...

  5. C++ #include<algorithm>

    今天下午大致学完了进阶指南中algorithm头文件下的内容,在这里进行一个总结.   reverse翻转   顾名思义,reverse进行的操作就是翻转原来的顺序,理解非常简单,故不赘述. 操作样例 ...

  6. nginx静态页面镜像

    user root; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error_lo ...

  7. mysql 日期字符串互转

    字符串转日期select str_to_date('2008-4-2 15:3:28','%Y-%m-%d %H:%i:%s');select str_to_date('2008-08-09 08:9 ...

  8. BOM问题

    在php编写中,很多人喜欢用notepad editplus 等等在windows下编写程序, 这就很容易出现一个问题,那就是文件签名的东西--BOM!所谓BOM,全称是Byte Order Mark ...

  9. 前端知识点回顾——Javascript篇(五)

    DOM 常用的DOM获取方法: node.children 返回子元素节点,没有兼容性问题,动态获取 node.parentNode 获取父节点,没有兼容性问题 node.offsetParent 获 ...

  10. 1.springboot内置tomcat的connection相关

    最近在研究tomcat的连接超时问题,环境:jdk1.8 + springboot 2.1.1.RELEASE,以下仅为个人理解,如果异议,欢迎指正. springboot的tomcat的几个配置参数 ...