c# 扩展方法Expand

    public static class Expand {

        #region string Is

        public static bool IsEmpty(this string s) {
            return string.IsNullOrWhiteSpace(s);
        }

        public static bool IsNumber(this string s) {
            if (s == null || s.Trim().Length == 0) return false;
            if (!char.IsNumber(s[0]) && s[0] != '-') return false;
            for (var i = 1; i < s.Length; i++) if (!char.IsNumber(s[i])) return false;
            return true;
        }

        public static bool IsEmail(this string s) {
            var pattern = @"^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
            var regex = new Regex(pattern);
            return regex.IsMatch(s);
        }

        public static bool IsMobilePhone(this string s) {
            var regex = new Regex("^1[34578]\\d{9}$");
            return regex.IsMatch(s);
        }

        public static bool IsDevice(this string s) {

            var result = false;

            using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PNPEntity")) {

                foreach (var mgt in searcher.Get()) {
                    if (mgt["name"].ToString().IndexOf(s, StringComparison.Ordinal) <= -1) continue;
                    result = true; mgt.Dispose(); break;
                }
                return result;
            }
        }

        #endregion

        #region string

        public static int ToInt(this object o, int def = 0) {
            if (o == null || o is DBNull) return def;
            if (o.ToString().Trim() == "") return def;
            //string s = o.ToString().Trim().Match(@"-?\d+");
            int r = def;
            if (!int.TryParse(o.ToString(), out r)) o.ToString();
            return r;
        }

        public static string Replace(this string s, string p, string r) {
            return Regex.Replace(s, p, r);
        }

        public static string ToBinary(this string s) {
            var data = Encoding.Unicode.GetBytes(s);
            var result = new StringBuilder(data.Length * 8);

            foreach (var b in data) {
                result.Append(Convert.ToString(b, 2).PadLeft(8, '0'));
            }
            return result.ToString();
        }

        public static string Hash(this string s) {
            return string.Join("", MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(s)).Select(v => v.ToString("x2")));
        }

        public static string ToHexReverse(this string s) {

            if (s.Length % 2 > 0) return s;
            var arr = s.ToCharArray();
            var r = new char[arr.Length];
            for (var i = 0; i < arr.Length; i += 2) {
                r[i] = arr[arr.Length - i - 2];
                r[i + 1] = arr[arr.Length - i - 1];
            }
            return new string(r);
        }

        /// <summary>
        /// 16进制字符串转字节数组
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static byte[] ToBytes(this string s) {
            s = Replace(s, @"[^\dA-Fa-f]+", "");
            if (s.Length % 2 > 0) s = "0" + s;
            var max = s.Length / 2;
            var buf = new byte[max];
            for (var i = 0; i < max; i++) buf[i] = Convert.ToByte(s.Substring(i * 2, 2), 16);
            return buf;
        }

        #endregion

        #region DateTime

        public static long Totimestamp(this DateTime date) {
            var ticks = date.ToUniversalTime().Ticks - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).Ticks;
            var timeSpan = ticks / TimeSpan.TicksPerMillisecond;
            return timeSpan;
        }
        public static DateTime Todatetime(this long timespan) {
            var startTime = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
            var dt = timespan.ToString().Length == 13 ? startTime.AddMilliseconds(timespan) : startTime.AddSeconds(timespan);
            return dt;
        }

        #endregion

        #region byte[]

        public static byte[] ToAsciiStr(this string s) { return Encoding.ASCII.GetBytes(s); }

        public static string ToHexStr(this byte[] b) {
            if (b == null) return "";
            var s = string.Join(" ", b.Select(i => i.ToString("X2")));
            return s;

            //return BitConverter.ToString(b, 0, b.Length);
        }

        public static ulong Getbal(this byte[] result, int ruleBal, int idx = 17, int len = 4) {

            switch (ruleBal) {
                case 0: //BCD
                    var s = BitConverter.ToString(result, idx, len).Replace("-", "").ToLower();
                    return s.IsNumber() ? s.ToULong() : ulong.MaxValue;
                case 1: // HEX 低前,反序(小端模式)
                case 2: // HEX 高前,顺序
                    ulong b = 0;
                    switch (ruleBal) {
                        case 1:
                            idx += len - 1;
                            b = result[idx];
                            for (var i = 1; i < len; i++) {
                                b = (b << 8) + result[idx - i];
                            }
                            break;
                        case 2:
                            b = result[idx];
                            for (var i = 1; i < len; i++) {
                                b = (b << 8) + result[idx + i];
                            }
                            break;
                    }
                    return b;
            }
            return 0;

        }

        public static byte[] Remove(this byte[] b, byte cut = 0x00) {
            var list = new List<byte>();
            list.AddRange(b);
            for (var i = list.Count - 1; i >= 0; i--) {
                if (list[i] == cut) { list.RemoveAt(i); } else { break; }
            }
            var lastbyte = new byte[list.Count];
            for (var i = 0; i < list.Count; i++) {
                lastbyte[i] = list[i];
            }
            return lastbyte;
        }

        public static double ToDouble(this object o, long def = 0) {
            if (o == null || o is DBNull) return def;
            return double.Parse(o.ToString());
        }

        public static ulong ToULong(this object o, ulong def = 0) {
            if (o == null || o is DBNull) return def;
            var str = o.ToString().Trim().ToLower();
            int i;
            if (str.IndexOf("e-", StringComparison.Ordinal) > 0) return def;
            if (str.IndexOf("e+", StringComparison.Ordinal) > 0) {
                i = str.IndexOf("e+", StringComparison.Ordinal);
                var a = ulong.Parse(str.Substring(0, i));
                i += 2;
                return a * ulong.Parse(str.Substring(i, str.Length - i));
            }
            i = str.IndexOf('.');
            if (i > -1) return ulong.Parse(str.Substring(0, i));
            return str.IsEmpty() ? def : ulong.Parse(str);
        }

        public static string Joins(this IEnumerable<string> values, string separator) {
            return string.Join(separator, values);
        }

        #endregion

        #region json

        public static string XmlTojson(this string s, string r = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>") {

            s = s.Replace(r, "");
            var doc = new XmlDocument();
            doc.LoadXml(s);
            return JsonConvert.SerializeXmlNode(doc, Newtonsoft.Json.Formatting.None, true);
        }

        public static string JsonToxml(this string s, string r = "root") {
            var doc = JsonConvert.DeserializeXmlNode(s, r);

            using (var stream = new MemoryStream()) {
                var writer = new XmlTextWriter(stream, null) { Formatting = System.Xml.Formatting.Indented };
                doc.Save(writer);

                using (var sr = new StreamReader(stream, Encoding.UTF8)) {
                    stream.Position = 0;
                    return sr.ReadToEnd();
                }
                ;
            }

        }

        public static string Json(this object o) {
            return new JavaScriptSerializer().Serialize(o);
        }

        public static object JsonParse(this string s) {
            return s.Trim().IsEmpty() ? new object() : new JavaScriptSerializer().Deserialize<object>(s);
        }

        public static bool IsJson(this string s) { try { JsonParse(s); return true; } catch { return false; } }

        #endregion

        #region match

        public static string match(this string s, string p, int i = 0) {
            if (string.IsNullOrEmpty(s) || string.IsNullOrEmpty(p)) return string.Empty;
            var match = Regex.Match(s, p);
            if (i < match.Groups.Count) return match.Groups[i].Value;
            i = 0;
            return match.Groups[i].Value;
        }

        public static string get(this string s, string name) { return match(s, "\"" + name + @""":""([^""]+)", 1); }

        public static string getmoney(this string s, string name) { return match(s, "\"" + name + @""":""?([\-\d\.]+)", 1); }

        public static string GetTitle(this string s, string title) {
            var tmpStr = $"<{title}[^>]*?>(?<Text>[^<]*)</{title}>"; //获取<title>之间内容  

            var titleMatch = Regex.Match(s, tmpStr, RegexOptions.IgnoreCase);

            var result = titleMatch.Groups["Text"].Value;
            return result;
        }

        public static string MathRound(this string s) {
            return Math.Round(decimal.Parse(s)).ToString(CultureInfo.InvariantCulture);
        }

        public static string MathCeiling(this string s) {
            return Math.Ceiling(decimal.Parse(s)).ToString(CultureInfo.InvariantCulture);
        }

        public static string MathFloor(this string s) {
            return Math.Floor(decimal.Parse(s)).ToString(CultureInfo.InvariantCulture);
        }

        #endregion

        #region Dictionary

        public static TValue DicGet<TKey, TValue>(this Dictionary<TKey, TValue> dict, TKey key, TValue defaultValue = default(TValue)) {
            if (key == null) return defaultValue;
            return dict.ContainsKey(key) ? dict[key] : defaultValue;
        }

        #endregion

        #region ToMoney

        public static string ToMoney(this uint m) { return (m * .01).ToString("0.00"); }
        public static string ToMoney(this ulong m, string prefix = "") {
            return prefix + (m * .01).ToString("0.00");
        }
        public static string ToMoney(this long m, string prefix = "") {
            return prefix + (m * .01).ToString("0.00");
        }

        public static string ToMoney(this int m) {
            return (m * .01).ToString("0.00");
        }
        public static long ToMoney(this object o, double q = 100) {
            if (o == null) return 0;
            double x = 0;
            if (!double.TryParse(o.ToString(), out x)) throw new ArgumentException("ToMoney: " + o);
            return Convert.ToInt64(x * q);
        }

        #endregion

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值