C#擴展方法(語法糖)

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
using System.Xml.Serialization;

namespace KN.Utility
{
    /// <summary>
    ///     [擴展類]對象級別擴展類
    /// </summary>
    public static class ObjExtension
    {
        /// <summary>
        ///     對輸入字符串進行MD5加密,返回小寫形式的加密字符串,字符串爲32字符的十六進制格式
        /// </summary>
        /// <param name="input">待加密的字符串</param>
        /// <returns>加密後的字符串</returns>
        public static string ToMD5(this string input)
        {
            using (var md5 = new MD5CryptoServiceProvider())
            {
                var data = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
                return BitConverter.ToString(data).Replace("-", string.Empty).ToLower(CultureInfo.CurrentCulture);
            }
        }

        /// <summary>
        ///     判斷路徑是不是圖片, true 是,false 不是
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static bool IsImage(this string input)
        {
            var extesion = new[] { "jpg", "jpeg", "png", "tiff", "gif", "bmp" };
            return extesion.Any(s => input.ToLower().EndsWith("." + s));
        }

        /// <summary>
        ///     合併拼接路徑
        /// </summary>
        /// <param name="path"></param>
        /// <param name="append"></param>
        /// <returns></returns>
        public static string Combine(this string path, string append)
        {
            if (path.EndsWith("/") && append.StartsWith("/")) path = path.TrimEnd('/');
            if (path.EndsWith("\\") && append.StartsWith("\\")) path = path.TrimEnd('\\');
            return Path.Combine(path, append);
        }

        /// <summary>
        ///     DataTable轉Json文本
        /// </summary>
        /// <param name="dataTable"></param>
        /// <returns></returns>
        public static string ToJson(this DataTable dataTable)
        {
            var javaScriptSerializer = new JavaScriptSerializer { MaxJsonLength = int.MaxValue };
            var arrayList = new ArrayList();
            foreach (DataRow dataRow in dataTable.Rows)
            {
                var dictionary =
                    dataTable.Columns.Cast<DataColumn>().ToDictionary<DataColumn, string, object>(
                        dataColumn => dataColumn.ColumnName, dataColumn => dataRow[dataColumn.ColumnName].ToStr());
                //實例化一個參數集合
                arrayList.Add(dictionary); //ArrayList集合中添加鍵值
            }

            return javaScriptSerializer.Serialize(arrayList);
        }

        /// <summary>
        ///     重寫ToString()的方法,該方法首先判斷object是否爲空,如果對象爲空則返回string.Empty,否則返回該對象的字符串表現形式
        /// </summary>
        /// <param name="obj">需要轉換的對象</param>
        /// <returns>字符串</returns>
        public static string ToStr(this object obj)
        {
            return obj == null ? string.Empty : obj.ToString();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="def"></param>
        /// <returns></returns>
        public static string ToStr(this object obj, string def)
        {
            return obj == null ? def : obj.ToString();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="html"></param>
        /// <returns></returns>
        public static string RemoveHtml(this string html)
        {
            var strText = Regex.Replace(html, "<[^>]+>", "");
            strText = Regex.Replace(strText, "&[^;]+;", "");
            return strText;
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效數字表現形式,轉換失敗後默認返回0
        /// </summary>
        /// <param name="obj">需要轉換的字符串</param>
        /// <returns>整數</returns>
        public static int ToInt(this object obj)
        {
            return ToInt32(obj, 0);
        }

        /// <summary>
        ///     將日期轉換爲字符串,默認格式:yyyy-MM-dd
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        public static string ToDateString(this object obj, string format = "yyyy-MM-dd")
        {
            return obj.ToDateTime().ToString(format);
        }

        /// <summary>
        ///     將時間轉換爲字符串,默認格式:yyyy-MM-dd HH:ss
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        public static string ToDateTimeString(this object obj, string format = "yyyy-MM-dd HH:ss")
        {
            return obj.ToDateTime().ToString(format);
        }

        /// <summary>
        ///     Json格式驗證
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string ToSafeJSON(this string input)
        {
            var stringBuilder = new StringBuilder(input.Length);
            foreach (var c in input)
                if (char.IsControl(c) || c == 39)
                {
                    int num = c;
                    stringBuilder.Append("\\u" + num.ToString("x4"));
                }
                else
                {
                    if (c == 34 || c == 92 || c == 47)
                        stringBuilder.Append('\\');
                    stringBuilder.Append(c);
                }

            return stringBuilder.ToString();
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效數字表現形式,轉換失敗後默認返回“0”
        /// </summary>
        /// <param name="obj">需要轉換的字符串</param>
        /// <param name="defaultVal">轉換失敗後的默認返回值</param>
        /// <returns>整數</returns>
        public static int ToInt(this object obj, int defaultVal)
        {
            return ToInt32(obj, defaultVal);
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效數字表現形式,轉換失敗後默認返回“0”
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static int ToInt32(this object str)
        {
            return ToInt32(str, 0);
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效數字表現形式,轉換失敗後默認返回“0”
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <param name="defaultVal">轉換失敗後的默認返回值</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static int ToInt32(this object str, int defaultVal)
        {
            if (str == null) return defaultVal;

            var result = defaultVal;

            result = int.TryParse(str.ToString(), out defaultVal) ? defaultVal : result;

            return result;
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效長整型表現形式,轉換失敗後默認返回“0”
        /// </summary>
        /// <param name="str">需要轉換的對象</param>
        /// <returns>長整型數字表現形式</returns>
        public static long ToInt64(this object str)
        {
            long defaultVal;
            if (str == null) return 0;
            long.TryParse(str.ToString(), out defaultVal);
            return defaultVal;
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效十進制數表現形式
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static decimal ToDecimal(this object str)
        {
            return ToDecimal(str, 0);
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效十進制數表現形式
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <param name="defaultVal">轉換失敗後的默認返回值</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static decimal ToDecimal(this object str, decimal defaultVal)
        {
            if (str.ToStr().IsEmpty()) return defaultVal;

            decimal.TryParse(str.ToStr(), out defaultVal);

            return defaultVal;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static double ToDouble(this object str)
        {
            return ToDouble(str, 0.0);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="str"></param>
        /// <param name="defaultVal"></param>
        /// <returns></returns>
        public static double ToDouble(this object str, double defaultVal)
        {
            if (str.ToStr().IsEmpty()) return defaultVal;

            double.TryParse(str.ToStr(), out defaultVal);

            return defaultVal;
        }

        /// <summary>
        ///     四捨五入格式化貨幣,默認保留兩位小數,格式不對將返回0.00
        ///     格式前: 163.2545 格式結果: 163.25
        /// </summary>
        /// <param name="dDecimal">需要轉換的貨幣數字</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static decimal ToDecimalFormat(this object dDecimal)
        {
            return Math.Round(dDecimal.ToDecimal(), 2, MidpointRounding.AwayFromZero).ToString("F2").ToDecimal();
        }

        /// <summary>
        ///     四捨五入格式化貨幣,指定小數位數,格式不對將返回0.小數點位數
        ///     格式前: 163.2545 格式結果: 163.25
        /// </summary>
        /// <param name="dDecimal">需要轉換的貨幣數字</param>
        /// <param name="decimals">小數位置</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static decimal ToDecimalFormat(this string dDecimal, int decimals)
        {
            return
                Math.Round(dDecimal.ToDecimal(), decimals, MidpointRounding.AwayFromZero).ToString("F" + decimals)
                    .ToDecimal();
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效數字表現形式
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static long ToLong(this object str)
        {
            return ToLong(str, 0);
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效數字表現形式
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <param name="defaultVal">轉換失敗後的默認返回值</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static long ToLong(this object str, long defaultVal)
        {
            if (str == null) return defaultVal;

            long.TryParse(str.ToString(), out defaultVal);

            return defaultVal;
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效日期時間表現形式
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static DateTime ToDateTime(this object str)
        {
            var dt = new DateTime(1900, 1, 1);

            return string.IsNullOrEmpty(str.ToStr()) ? dt : ToDateTime(str, dt);
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效日期時間表現形式
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <param name="defaultVal">轉換失敗後的默認返回值</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static DateTime ToDateTime(this object str, DateTime defaultVal)
        {
            if (str == null || str.ToStr().IsEmpty()) return defaultVal;
            var result = defaultVal;
            if (!DateTime.TryParse(str.ToString(), out result)) result = defaultVal;
            return result;
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效布爾值表現形式,默認中(不區分大小寫) True,1,Y 都爲True類型
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static bool ToBoolean(this object str)
        {
            return ToBoolean(str, false);
        }

        /// <summary>
        ///     將此實例的字符串轉換爲它的有效布爾值表現形式,默認中(不區分大小寫) True,1,Y 都爲True類型
        /// </summary>
        /// <param name="str">需要轉換的字符串</param>
        /// <param name="defaultVal">轉換失敗後的默認返回值</param>
        /// <returns>返回轉換後的數字表現形式</returns>
        public static bool ToBoolean(this object str, bool defaultVal)
        {
            if (string.IsNullOrEmpty(str.ToStr()))
                return defaultVal;

            return str.ToString().ToLower() == "true" || str.ToString().ToLower() == "1" ||
                   str.ToString().ToLower() == "y" || str.ToString() == "是";
        }

        /// <summary>
        ///     將對象序列化爲Xml串
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static string ToXml(this object obj)
        {
            try
            {
                using (var sw = new StringWriter())
                {
                    var xz = new XmlSerializer(obj.GetType());
                    xz.Serialize(sw, obj);
                    return sw.ToString();
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        /// <summary>
        ///     將一個對象轉成JSON字符串。
        /// </summary>
        /// <param name="obj">需要轉成JSON的對象。</param>
        /// <returns>返回JSON格式字符串。</returns>
        public static string ToJson(this object obj)
        {
            return JsonSerialize(obj);
        }

        /// <summary>
        ///     Json序列化對象
        /// </summary>
        /// <typeparam name="T">對象類型</typeparam>
        /// <param name="t">對象</param>
        /// <returns></returns>
        public static string JsonSerialize<T>(T t)
        {
            try
            {
                var serializer = new JavaScriptSerializer { MaxJsonLength = int.MaxValue };
                return serializer.Serialize(t);
            }
            catch (Exception ex)
            {
            }

            return string.Empty;
        }


        /// <summary>
        ///     獲取字段描述
        /// </summary>
        /// <param name="enumVal"></param>
        /// <returns></returns>
        public static string GetDescription(this Enum enumVal)
        {
            var field = enumVal.GetType().GetField(enumVal.ToString());
            if (field != null)
                foreach (DescriptionAttribute desc in field.GetCustomAttributes(typeof(DescriptionAttribute), false))
                    return desc.Description;
            return "";
        }


        /// <summary>
        /// 
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static bool IsEmpty(this object val)
        {
            if (val == null) return true;
            return string.IsNullOrEmpty(val.ToString());
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="val"></param>
        /// <returns></returns>
        public static bool IsNotEmpty(this object val)
        {
            return !IsEmpty(val);
        }

        /// <summary>
        /// 過濾sql字符串
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string FilterSql(this string input)
        {
            if (string.IsNullOrEmpty(input))
            {
                return "";
            }
            input = input.Trim();
            input = SqlTextFilter.Filter(input);
            input = SqlTextFilter.FilterSqlStr(input);
            input = SqlTextFilter.ReplaceSqlChar(input);
            input = SqlTextFilter.SqlFilter(input);
            return input;
        }
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章