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”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段

记录C#常用的代码片段

C#程序员经常用到的10个实用代码片段 - 操作系统

C#编程的最佳工具

C# SQLConnection 池

用于从配置文件创建数组的可扩展 C# 代码