C# 基本的扩展方法
/// <summary> /// 扩展方法 /// </summary> public static class Extensions { static Extensions() { } /// <summary> /// 将对象序列化成json字符串 /// </summary> /// <param name="obj"></param> /// <param name="isToLower">是否将键的首字母转为小写</param> /// <param name="isFormat">是否格式化,默认不格式化</param> /// <param name="useValuesOfEnums">枚举是否使用数字</param> /// <param name="includeTypeInfo">是否包含类型信息</param> /// <returns></returns> public static string ToJson(this object obj, bool isToLower = true, bool isFormat = false, bool useValuesOfEnums = true, bool includeTypeInfo = false) { using (var scope = JsConfig.BeginScope()) { scope.IncludeTypeInfo = includeTypeInfo; //排除类型信息 scope.ExcludeTypeInfo = !includeTypeInfo; //排除类型信息 scope.EmitCamelCaseNames = isToLower; scope.TreatEnumAsInteger = useValuesOfEnums; var json = JsonSerializer.SerializeToString(obj); return isFormat ? json.IndentJson() : json; } } /// <summary> /// 将json文件序列化成对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="json"></param> /// <returns></returns> public static T ToObject<T>(this string json) { return json.FromJson<T>(); } /// <summary> /// 将json文件序列化成对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="json"></param> /// <returns></returns> public static object ToObject(this string json, Type type) { return JsonSerializer.DeserializeFromString(json, type); } /// <summary> ///获取指定字符串md5值 ,使用32小写加密 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string ToMD5(this string str, Encoding ec = null) { MD5 md5 = new MD5CryptoServiceProvider(); byte[] fromData = ec == null ? Encoding.Default.GetBytes(str) : ec.GetBytes(str); byte[] targetData = md5.ComputeHash(fromData); StringBuilder strMd5 = new StringBuilder(); for (int i = 0; i < targetData.Length; i++) { strMd5.AppendFormat("{0:x2}", targetData[i]); } return strMd5.ToString(); } /// <summary> /// 字符串MD5加密后小写 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string ToLowerMD5(this string str) { return str.ToMD52().ToLower(); } public static string ToMD52(this string str) { MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); //string md5Str = BitConverter.ToString(md5.ComputeHash(Encoding.UTF8.GetBytes(str))); byte[] s = md5.ComputeHash(Encoding.UTF8.GetBytes(str)); string pwd = ""; // 通过使用循环,将字节类型的数组转换为字符串,此字符串是常规字符格式化所得 for (int i = 0; i < s.Length; i++) { // 将得到的字符串使用十六进制类型格式。格式后的字符是小写的字母,如果使用大写(X)则格式后的字符是大写字符 pwd = pwd + s[i].ToString("x2"); } return pwd;// md5Str.Replace("-", ""); } /// <summary> /// 字符串转换整型,转换失败返回默认值 /// </summary> /// <param name="str">字符串</param> /// <param name="def">默认值为0,可选</param> /// <returns></returns> public static int ToInt(this string str, int def = 0) { int result = 0; if (int.TryParse(str, out result)) return result; else return def; } /// <summary> /// object转换整型,转换失败返回默认值 /// </summary> /// <param name="obj">object对象</param> /// <param name="def">默认值为0,可选</param> /// <returns></returns> public static int ToInt(this object obj, int def = 0) { if (obj == null) return def; try { return Convert.ToInt32(obj); } catch (Exception ex) { int result = 0; if (int.TryParse(obj.ToString(), out result)) return result; else return def; } } public static int ToInt(this decimal obj) { return (int)(obj); } public static int ToInt(this float obj) { return (int)(obj); } public static int ToInt(this double obj) { return (int)(obj); } public static int ToInt(this Hashtable ht, string key, int def = 0) { if (ht == null || string.IsNullOrWhiteSpace(key)) return def; if (!ht.ContainsKey(key)) return def; return ht[key].ToInt(def); } /// <summary> /// 校验字符串是否为6为数字 /// </summary> /// <param name="value"></param> /// <returns></returns> public static bool IsInt6(this string value) { return Regex.IsMatch(value, @"^\d{6}$"); } /// <summary> /// 枚举转换整型,转换失败返回默认值 /// </summary> /// <param name="obj">枚举对象</param> /// <returns></returns> public static int ToInt(this Enum obj) { return obj.ToInt(0); } /// <summary> /// 枚举转换整型,转换失败返回默认值 /// </summary> /// <param name="obj">枚举对象</param> /// <param name="def">默认值为0,可选</param> /// <returns></returns> public static int ToInt(this Enum obj, int def = 0) { if (obj == null) return def; try { return Convert.ToInt32(obj); } catch { return def; } } public static decimal ToDecimal(this string str, decimal def = 0) { decimal result = 0; if (decimal.TryParse(str, out result)) return result; else return def; } public static decimal ToDecimal(this object obj, decimal def = 0) { if (obj == null) return def; decimal result = 0; if (decimal.TryParse(obj.ToString(), out result)) return result; else return def; } /// <summary> /// 四舍五入保留两位小数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static decimal ToDecimal2(this decimal obj) { return Math.Round(obj, 2, MidpointRounding.AwayFromZero); } /// <summary> /// 保留两位小数,超出部分抹零 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static decimal ToDecimal2WithFloor(this decimal obj) { return (Math.Floor(obj * 100M) / 100); } /// <summary> /// 保留两位小数,超出部分部分进位 /// </summary> /// <param name="param"></param> /// <returns></returns> public static decimal ToDecimal2Celling(this decimal param) { return (Math.Ceiling(param * 100M) / 100); } /// <summary> /// 四舍五入保留两位小数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static double ToDouble2(this double obj) { return Math.Round(obj, 2, MidpointRounding.AwayFromZero); } /// <summary> /// 四舍五入保留四位小数 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static decimal ToDecimal4(this decimal obj) { return Math.Round(obj, 4, MidpointRounding.AwayFromZero); } public static double ToDouble(this object obj, double def = 0) { if (obj == null) return def; double result = 0; if (double.TryParse(obj.ToString(), out result)) return result; else return def; } /// <summary> /// 逗号分隔数字每三位一个逗号不保留小数点 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string ToCommaSeparateString(this object obj) { return string.Format("{0:N0}", obj); } /// <summary> /// 逗号分隔数字每三位一个逗号保留小数点2位 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string ToCommaSeparateString2(this object obj) { return string.Format("{0:N2}", obj); } /// <summary> /// 逗号分隔数字每三位一个逗号保留小数点4位 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string ToCommaSeparateString4(this object obj) { return string.Format("{0:N4}", obj); } /// <summary> /// object转换ToStr(),转换失败返回默认值 /// </summary> public static string ToStr(this object obj, string def = "") { if (obj == null) return def; else return obj.ToString().Trim(); //if (obj is String) // return obj.ToString(); //else // return def; } /// <summary> /// object转换整型,转换失败返回默认值 /// </summary> /// <param name="obj">object对象</param> /// <param name="def">默认值为DateTime.Now,可选</param> /// <returns></returns> public static DateTime ToDateTime(this object obj, DateTime? def = null) { if (def == null) def = DateTime.Now; if (obj == null) return def.Value; DateTime result = DateTime.Now; if (DateTime.TryParse(obj.ToString(), out result)) return result; else return def.Value; } /// <summary> /// 整型转换为布尔型 /// </summary> /// <param name="value">要转换的值</param> /// <returns></returns> public static bool IntToBool(this int value) { return value == 1 ? true : false; } /// <summary> /// 布尔型转换为整型 /// </summary> /// <param name="value"></param> /// <returns>true为1,false为0</returns> public static int BoolToInt(this bool value) { return value ? 1 : 0; } /// <summary> /// 是否只含两位小数 /// </summary> /// <param name="value"></param> /// <returns></returns> public static bool IsTwoDecimal(this decimal value) { var temp = value * 100; return temp - Math.Floor(temp) == 0; } /// <summary> /// 检查是否为数字 /// </summary> /// <param name="input"></param> /// <returns></returns> public static bool IsNumeric(this string input) { double result = 0; return double.TryParse(input, NumberStyles.Any, null, out result); } /// <summary> /// 检查是否为日期型的字符串 /// </summary> /// <param name="input">要检查的字符串</param> /// <returns>如果是,则返回true,如果不是,则返回false</returns> public static bool IsDateTime(this string input) { DateTime dt; return DateTime.TryParse(input, out dt); } /// <summary> /// 逗号分隔转list<int> /// </summary> /// <param name="input"></param> /// <returns></returns> public static List<int> ToIntList(this string input) { if (string.IsNullOrEmpty(input)) { return new List<int>(); } return input.Split(',').Select(c => c.IsNumeric() ? int.Parse(c) : 0).ToList(); } /// <summary> /// 匹配单项 /// </summary> /// <param name="input">字符串</param> /// <param name="pattern">要匹配的正则表达式模式</param> /// <param name="ro">枚举值的一个按位组合,默认值为指定不区分大小写的匹配</param> /// <returns></returns> public static RegexDictionary Match(this string input, string pattern, RegexOptions ro = RegexOptions.IgnoreCase) { RegexDictionary dic = new RegexDictionary(); Match m = Regex.Match(input, pattern, ro); if (!m.Success) return dic; for (int i = 0; i < m.Groups.Count; i++) { dic[i] = m.Groups[i].Value; } return dic; } /// <summary> /// 匹配多项 /// </summary> /// <param name="input">字符串</param> /// <param name="pattern">要匹配的正则表达式模式</param> /// <param name="ro">枚举值的一个按位组合,默认值为指定不区分大小写的匹配</param> /// <returns></returns> public static ListDictionary Matches(this string input, string pattern, RegexOptions ro = RegexOptions.IgnoreCase) { ListDictionary list = new ListDictionary(); MatchCollection mc = Regex.Matches(input, pattern, ro); if (mc.Count == 0) return list; for (int j = 0; j < mc.Count; j++) { RegexDictionary dic = new RegexDictionary(); Match m = mc[j]; for (int i = 0; i < m.Groups.Count; i++) { dic[i] = m.Groups[i].Value; } list[j] = dic; } return list; } /// <summary> /// Guid转成Mysql的无横线字符串 /// </summary> /// <param name="guid"></param> /// <returns></returns> public static string ToShortString(this Guid guid) { return guid.ToString("N"); } /// <summary> /// 将一个字符串集合合并称一个字符串 /// </summary> /// <param name="list"></param> /// <param name="separator"></param> /// <returns></returns> public static string Join(this IEnumerable<string> list, string separator) { var values = list as string[] ?? list.ToArray(); return (list.IsNotNull() && values.Any()) ? string.Join(separator, values) : string.Empty; } /// <summary> /// 根据键名称解析内部json对象 /// </summary> /// <typeparam name="T">返回对象类型</typeparam> /// <param name="innerkey">要获取的内部key名称</param> /// <returns></returns> public static T FromInnerJson<T>(this string str, string innerkey) where T : new() { T result = default(T); try { Newtonsoft.Json.Linq.JObject jo = (Newtonsoft.Json.Linq.JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(str); result = jo[innerkey].ToString().FromJson<T>(); } catch (Newtonsoft.Json.JsonReaderException ex) { throw new Newtonsoft.Json.JsonReaderException("解析json字符串错误,具体原因:" + ex.Message); } return result; } /// <summary> /// 将集合按特定分隔符拼接成字符串 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="arr"></param> /// <param name="separator"></param> /// <returns></returns> public static string JoinStr<T>(this IEnumerable<T> arr, string separator) { if (arr == null) { return null; } var tmpArr = arr.Where(it => it != null); if (!tmpArr.Any()) { return string.Empty; } return string.Join(separator, tmpArr.Select(it => it.ToString())); } }
public class RegexDictionary { private Dictionary<int, string> dic = new Dictionary<int, string>(); public string this[int key] { get { return dic.ContainsKey(key) ? dic[key] : string.Empty; } set { dic[key] = value; } } public int Count { get { return dic.Keys.Count; } } public IEnumerator<string> GetEnumerator() { return dic.Values.GetEnumerator(); } } public class ListDictionary { private Dictionary<int, RegexDictionary> dic = new Dictionary<int, RegexDictionary>(); public RegexDictionary this[int key] { get { return dic.ContainsKey(key) ? dic[key] : new RegexDictionary(); } set { dic[key] = value; } } public int Count { get { return dic.Keys.Count; } } public IEnumerator<RegexDictionary> GetEnumerator() { return dic.Values.GetEnumerator(); } }