C#常用处理数据类型转换、数据源转换、数制转换、编码转换相关的扩展
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#常用处理数据类型转换、数据源转换、数制转换、编码转换相关的扩展的更多相关文章
- SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作
原文:SSIS从理论到实战,再到应用(7)----常用的数据类型转换操作 上期回顾: SSIS从理论到实战,再到应用(6)----SSIS的自带日志功能 在抽取各种应用的数据时候,经常会遇到数据需要转 ...
- Linux下查看文件编码,文件编码格式转换和文件名编码转换
linux相关 2008-10-07 10:46 阅读1392 评论0 字号: 大大 中中 小小 如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编 ...
- Python常用的数据类型转换
在实际开发中.经常要根据需求来转变一些变量的类型. 需要用到以下函数:
- Python常用数据类型转换
常用的数据类型转换 目标 了解类型转换的作用 掌握常用的类型转换 函数 说明 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ...
- python运算符和常用数据类型转换
运算符 算术运算符 运算符 描述 实例 + 加 两个对象相加 a + b 输出结果 30 - 减 得到负数或是一个数减去另一个数 a - b 输出结果 -10 * 乘 两个数相乘或是返回一个被重复若干 ...
- Java基础知识强化22:Java中数据类型转换
数据类型转换: (1). 自动转换 低级变量可以直接转换为高级变量,这叫自动类型转换.比如: byte b: int b: long b: float b: double b: 上面的语句可 ...
- JavaScript的数据类型转换
首先,由于JavaScript是弱类型语言(弱类型的语言的东西没有明显的类型,他能随着环境的不同,自动变换类型而强类型则没这样的规定,不同类型间的操作有严格定义,只有相同类型的变量才能操作,虽然系统也 ...
- 简谈-Python的输入、输出、运算符、数据类型转换
输出: 格式化输出: 看到了 % 这样的操作符,这就是Python中格式化输出. 换行输出: 在输出的时候,如果有 \n 那么,此时 \n 后的内容会在另外一行显示 输入: 在python2.7当中, ...
- JS 数据类型转换以其他
JavaScript 是一种弱类型的语言,也就是没有类型限制,变量可以随时被赋予任意值. 同时,在程序运行过程中,类型会被自动确认的.因此,这就是涉及到数据的类型转换.在 JS 的世界中,数据类型转换 ...
随机推荐
- BZOJ 2594: [Wc2006]水管局长数据加强版 (LCT维护最小生成树)
离线做,把删边转化为加边,那么如果加边的两个点不连通,直接连就行了.如果联通就找他们之间的瓶颈边,判断一下当前边是否更优,如果更优就cut掉瓶颈边,加上当前边. 那怎么维护瓶颈边呢?把边也看做点,向两 ...
- @EnableScheduling
- Linux命令行学习日志-ps ax
当我们需要查询某个运行中的进程的时候,这个命令就显得很有用了,可以查看当前进程的PID和状态(S代表睡眠,SW代表睡眠和等待,R表示运行中) ps ax //查看当前运行中的进程
- jQuery的$符号
jQuery使用$的原因是: 书写简洁, 相对于其他字符与众不同, 容易被记住. JQuery占用了两个变量: $ 和 jQuery. 当在代码中打印 $ 和 jQuery时: <script ...
- [Linux]ubuntu更改国内源
转自: https://blog.csdn.net/qq_35451572/article/details/79516563 推荐快速更新国内源 https://blog.csdn.net/qq_35 ...
- Yet Another Division Into Teams
E. Yet Another Division Into Teams 首先要想明白一个东西,就是当一个小组达到六个人的时候,它一定可以拆分成两个更优的小组. 这个题可以用动态规划来写,用一个数组来保存 ...
- 记一次maxwell报错:Couldn't find table 'violation_info' in database och_evcard_data
往常maxwell是正常跑的,但是突然今天报错: Couldn't find table 'violation_info' in database och_evcard_data 而且这个库和这个表, ...
- selenium知识点
1. 导包 from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from se ...
- django 问题总结(八)
1.第一步创建项目,不成功,命令不报错一直不创建文件夹 django-admin.py startproject mysite2 原因: django-admin.py ,py文件的默认打开方式不对, ...
- DS-博客作业07
1.本周学习总结(0--2分) 1.1思维导图 1.2 谈谈你对查找运算的认识及学习体会. 在查找这一章,我学习的比较认真,但是还是有部分没太清楚.这章没有前一章树那么多的代码要记,但是还是要用心. ...