C# 会可能需要的扩展
Posted R-YPTM-R
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 会可能需要的扩展相关的知识,希望对你有一定的参考价值。
1. List 转成DataSet
/// <summary> /// 集合数据转成 DataSet /// </summary> /// <typeparam name="TSource"></typeparam> /// <param name="list"></param> /// <returns></returns> public static DataSet ToDataSet<TSource>(this IList<TSource> list) { Type elementType = typeof(TSource); DataSet ds = new DataSet(); DataTable dt = new DataTable(); ds.Tables.Add(dt); foreach (var pi in elementType.GetProperties()) { Type colType = Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType; dt.Columns.Add(pi.Name, colType); } foreach (TSource item in list) { DataRow row = dt.NewRow(); foreach (var pi in elementType.GetProperties()) { row[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value; } dt.Rows.Add(row); } return ds; } public static DataSet ToDataSet<TSource>(this ICollection<TSource> list) { Type elementType = typeof(TSource); DataSet ds = new DataSet(); DataTable dt = new DataTable(); ds.Tables.Add(dt); foreach (var pi in elementType.GetProperties()) { Type colType = Nullable.GetUnderlyingType(pi.PropertyType) ?? pi.PropertyType; dt.Columns.Add(pi.Name, colType); } foreach (TSource item in list) { DataRow row = dt.NewRow(); foreach (var pi in elementType.GetProperties()) { row[pi.Name] = pi.GetValue(item, null) ?? DBNull.Value; } dt.Rows.Add(row); } return ds; }
2. 枚举扩展函数
/// <summary> /// 枚举扩展函数 /// <para>把枚举转换成对应的byte 类型,再转换成String</para> /// </summary> /// <param name="en"></param> /// <returns></returns> public static string ToByteString(this Enum en) { return ((byte)(dynamic)en).ToString(); }
3. Md5加密函数
/// <summary> /// Md5加密函数 /// </summary> /// <param name="strPwd"></param> /// <returns></returns> public static string Encrypt(string strPwd) { var md5Hasher = MD5.Create(); var data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(strPwd)); //将字符编码为一个字节序列 var sBuilder = new StringBuilder(); //计算data字节数组的哈希值 foreach (var @byte in data) { sBuilder.Append(@byte.ToString("x2")); } return sBuilder.ToString(); }
4.MVC 扩展
/// <summary> /// MVC 扩展 /// </summary> /// <param name="parer">The parer.</param> /// <param name="subjectType">Type of the subject.</param> /// <returns></returns> public static MvchtmlString MvcHtmlStringExpand(string parer, byte subjectType) { var html = "<h3>这是一个扩展方法</h3>"; return MvcHtmlString.Create(html); }
5.字符串转换成byte
/// <summary> /// 字符串转换成byte /// </summary> /// <param name="val"></param> /// <returns></returns> public static byte ToByte(this string val) { if (string.IsNullOrEmpty(val)) { return 0; } var intVal = int.Parse(val); return (byte)intVal; }
6.字符串转换成int16
/// <summary> /// 字符串转换成int16 /// </summary> /// <param name="val"></param> /// <returns></returns> public static short ToInt16(this string val) { if (string.IsNullOrEmpty(val)) { return 0; } var intVal = int.Parse(val); return (short)intVal; }
7.字符串是否为空
/// <summary> /// 字符串是否为空 /// </summary> /// <param name="val"></param> /// <returns></returns> public static bool IsNull(this string val) { return string.IsNullOrEmpty(val); }
8.字符串是不为空,有值状态
/// <summary> /// 字符串是不为空,有值状态 /// </summary> /// <param name="val"></param> /// <returns></returns> public static bool IsNotNull(this string val) { return !string.IsNullOrEmpty(val); }
以上是关于C# 会可能需要的扩展的主要内容,如果未能解决你的问题,请参考以下文章
对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段