zoukankan      html  css  js  c++  java
  • ExtendHelper

    public static class ExtendHelper
        {
            /// <summary>
            /// 检查当前字符串是否符合某种格式
            /// </summary>
            /// <param name="thisValue"></param>
            /// <param name="pattern"></param>
            /// <returns></returns>
            public static bool IsMatch(this string thisValue, string regexPattern)
            {
                return Regex.IsMatch(thisValue, regexPattern);
            }
    
            /// <summary>
            /// 是否是有效的Email地址
            /// </summary>
            /// <param name="thisValue"></param>
            /// <returns></returns>
            public static bool IsEmail(this string thisValue)
            {
                return Regex.IsMatch(thisValue, @"w+([-+.']w+)*@w+([-.]w+)*.w+([-.]w+)*");
            }
    
            /// <summary>
            /// 如果为Null,则转换成T类型的值
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="thisValue"></param>
            /// <param name="val"></param>
            /// <returns></returns>
            public static T IfNullThen<T>(this object thisValue, T val)
            {
                return thisValue == null ? val : (T)thisValue;
            }
    
            #region IsIn IsNotIn
    
            /// <summary>
            /// 是否在指定的字符串集合中,相当于SQL的In操作符
            /// </summary>
            /// <param name="thisValue"></param>
            /// <param name="stringCollect"></param>
            /// <returns></returns>
            public static bool IsIn(this string thisValue, params string[] stringCollect)
            {
                if (stringCollect == null || stringCollect.Length <= 0)
                    return false;
    
                return Array.IndexOf<string>(stringCollect, thisValue) > -1;
            }
    
            /// <summary>
            /// 当前对象是否在某集合中
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="thisValue"></param>
            /// <param name="collect"></param>
            /// <param name="equalLogic">判断相等的逻辑</param>
            /// <returns></returns>
            public static bool IsIn<T>(this T thisValue, List<T> collect, Func<T, T, bool> equalLogic)
            {
                if (collect == null || collect.Count <= 0)
                    return false;
    
                bool result = false;
                foreach (T item in collect)
                {
                    if (equalLogic(item, thisValue))
                    {
                        result = true;
                        break;
                    }
                }
                return result;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="thisValue"></param>
            /// <param name="collect"></param>
            /// <param name="equalLogic">判断相等的逻辑</param>
            /// <returns></returns>
            public static bool IsNotIn<T>(this T thisValue, List<T> collect, Func<T, T, bool> equalLogic)
            {
                return !thisValue.IsIn(collect, equalLogic);
            }
    
            #endregion
    
            /// <summary>
            /// 是否以 startBy 参数开头
            /// </summary>
            /// <param name="thisValue"></param>
            /// <param name="startWith"></param>
            /// <returns></returns>
            public static bool StartBy(this string thisValue, params string[] startBy)
            {
                foreach (string item in startBy)
                {
                    if (thisValue.StartsWith(item))
                        return true;
                }
    
                return false;
            }
    
            /// <summary>
            /// 是否以 startBy 参数开头
            /// </summary>
            /// <param name="thisValue"></param>
            /// <param name="startBy"></param>
            /// <param name="splitSign">startBy 的分隔符</param>
            /// <returns></returns>
            public static bool StartBy(this string thisValue, string startBy, char splitSign)
            {
                string[] starts = startBy.Split(splitSign);
                if (starts != null && starts.Length > 0)
                    foreach (string item in starts)
                    {
                        if (thisValue.StartsWith(item))
                            return true;
                    }
    
                return false;
            }
    
            /// <summary>
            /// 根据指定的正则表达式进行替换
            /// </summary>
            /// <param name="thisValue"></param>
            /// <param name="regexPattern"></param>
            /// <param name="replacement"></param>
            /// <returns></returns>
            public static string ReplaceString(this string thisValue, string regexPattern, string replacement)
            {
                if (!string.IsNullOrEmpty(thisValue))
                {
                    return Regex.Replace(thisValue, regexPattern, replacement, RegexOptions.IgnoreCase);
                }
                return string.Empty;
            }
    
            /// <summary>
            /// 根据只等的正则表达式获取字符串
            /// </summary>
            /// <param name="thisValue"></param>
            /// <param name="regexPattern"></param>
            /// <returns></returns>
            public static string[] GetSubString(this string thisValue, string regexPattern)
            {
                string[] result = null;
                MatchCollection collection = Regex.Matches(thisValue, regexPattern, RegexOptions.IgnoreCase);
                if (collection != null && collection.Count > 0)
                {
                    result = new string[collection.Count];
                    for (int i = 0; i < collection.Count; i++)
                    {
                        result[i] = collection[i].Value;
                    }
                }
    
                return result;
            }
    
            /// <summary>
            /// 从结果集中排除另一个结果集
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="thisList"></param>
            /// <param name="rejectList"></param>
            /// <param name="removeLogic">排除的逻辑</param>
            /// <returns></returns>
            public static List<T> Reject<T>(this List<T> thisList, List<T> rejectList, Func<T, T, bool> removeLogic)
            {
                foreach (var item in rejectList)
                {
                    for (int i = 0; i < thisList.Count; i++)
                    {
                        T t = thisList[i];
                        if (removeLogic(t, item)) thisList.Remove(t);
                    }
                }
    
                return thisList;
            }
    
            /// <summary>
            /// 是在某某时间之间,包含from和to
            /// </summary>
            /// <param name="thisValue"></param>
            /// <param name="from"></param>
            /// <param name="to"></param>
            /// <returns></returns>
            public static bool Between(this DateTime thisValue, DateTime from, DateTime to)
            {
                return thisValue >= from && thisValue <= to;
            }
    
            #region Transform
    
    
            /// <summary>
            /// 从一个对象Transform到另外一个对象
            /// </summary>
            /// <typeparam name="S"></typeparam>
            /// <typeparam name="R"></typeparam>
            /// <param name="source"></param>
            /// <param name="RfieldNameFunc">source对象属性名对应的Return对象的属性名,默认是source对象的属性名对应return对象的属性名</param>
            /// <returns></returns>
            public static R Transform<S, R>(this S source, Func<string, string> RfieldNameFunc = null) where R : new()
            {
                R result = new R();
    
                result.SetProperties<S, R>(source, RfieldNameFunc);
    
                return result;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="S"></typeparam>
            /// <typeparam name="R"></typeparam>
            /// <param name="sourceList"></param>
            /// <param name="RfieldNameFunc">source对象属性名对应的Return对象的属性名,默认是source对象的属性名对应return对象的属性名</param>
            /// <returns></returns>
            public static List<R> Transform<S, R>(this IEnumerable<S> sourceList, Func<string, string> RfieldNameFunc = null) where R : new()
            {
                List<R> resultList = new List<R>();
                foreach (S item in sourceList)
                {
                    resultList.Add(item.Transform<S, R>(RfieldNameFunc));
                }
    
                return resultList;
            }
    
            /// <summary>
            /// 设置属性
            /// </summary>
            /// <typeparam name="S"></typeparam>
            /// <typeparam name="R"></typeparam>
            /// <param name="thisValue"></param>
            /// <param name="source"></param>
            /// <param name="RfieldNameFunc">要设置属性的名字,默认是source对象的属性名对应return对象的属性名</param>
            public static void SetProperties<S, R>(this R thisValue, S source, Func<string, string> RfieldNameFunc = null)
            {
                PropertyInfo[] sourceFields = typeof(S).GetProperties();
    
                #region Set Result Property
                if (sourceFields != null)
                {
                    foreach (PropertyInfo sourceProperty in sourceFields)
                    {
                        PropertyInfo resultProperty = null;
                        foreach (var item in typeof(R).GetProperties())
                        {
                            string rfieldName = RfieldNameFunc != null ? RfieldNameFunc(sourceProperty.Name).ToLower() : sourceProperty.Name.ToLower();
                            if (item.Name.ToLower() == rfieldName)
                            {
                                resultProperty = item;
                                break;
                            }
                        }
    
                        if (resultProperty != null && resultProperty.CanWrite)
                        {
                            object val = sourceProperty.GetValue(source, null);
                            if (resultProperty.PropertyType.IsGenericType && resultProperty.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                            {
                                /* 如果目标类型是可空类型
                                 * 1. source.value != null, 则用基类型取值,然后给目标类型赋值
                                 * 2. source.value = null,则目标类型用默认值null
                                 */
                                if (val != null)
                                {
                                    Type baseType = resultProperty.PropertyType.GetGenericArguments()[0];
                                    resultProperty.SetValue(thisValue, Convert.ChangeType(val, baseType, null), null);
                                }
                            }
                            else
                            {
                                /* 目标类型不是可空类型
                                 * 1. source.value = null,则取source.value的默认值给目标类型赋值
                                 * 2. source.value != null,则直接给目标类型赋值
                                 */
                                if (val != null)
                                {
                                    resultProperty.SetValue(thisValue, Convert.ChangeType(val, resultProperty.PropertyType, null), null);
                                }
                                else
                                {
                                    resultProperty.SetValue(thisValue, Convert.ChangeType(DefaultForType(resultProperty.PropertyType), resultProperty.PropertyType, null), null);
                                }
                            }
                        }
                    }
                }
                #endregion
            }
    
            /// <summary>
            /// 设置属性
            /// </summary>
            /// <typeparam name="S"></typeparam>
            /// <typeparam name="R"></typeparam>
            /// <param name="thisValue"></param>
            /// <param name="source"></param>
            /// <param name="RfieldNameFunc">要设置属性的名字,默认是source对象的属性名对应return对象的属性名</param>
            public static void SetProperties<S, R>(this R thisValue, S source)
            {
                PropertyInfo[] sourceFields = typeof(S).GetProperties();
    
                #region Set Result Property
                if (sourceFields != null)
                {
                    var entityName = typeof(S).Name;
                    foreach (PropertyInfo sourceProperty in sourceFields)
                    {
                        PropertyInfo resultProperty = null;
                        foreach (var item in typeof(R).GetProperties())
                        {
                            string rfieldName = sourceProperty.Name.ToLower();
                            if (item.Name.ToLower() == rfieldName)
                            {
                                resultProperty = item;
                                break;
                            }
                        }
    
                        if (resultProperty != null && resultProperty.CanWrite)
                        {
                            object val = sourceProperty.GetValue(source, null);
                            if (resultProperty.PropertyType.IsGenericType && resultProperty.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
                            {
                                /* 如果目标类型是可空类型
                                 * 1. source.value != null, 则用基类型取值,然后给目标类型赋值
                                 * 2. source.value = null,则目标类型用默认值null
                                 */
                                if (val != null)
                                {
                                    Type baseType = resultProperty.PropertyType.GetGenericArguments()[0];
                                    resultProperty.SetValue(thisValue, Convert.ChangeType(val, baseType, null), null);
                                }
                            }
                            else
                            {
                                /* 目标类型不是可空类型
                                 * 1. source.value = null,则取source.value的默认值给目标类型赋值
                                 * 2. source.value != null,则直接给目标类型赋值
                                 */
                                if (val != null)
                                {
                                    resultProperty.SetValue(thisValue, Convert.ChangeType(val, resultProperty.PropertyType, null), null);
                                }
                                else
                                {
                                    resultProperty.SetValue(thisValue, Convert.ChangeType(DefaultForType(resultProperty.PropertyType), resultProperty.PropertyType, null), null);
                                }
                            }
                        }
                    }
                }
                #endregion
            }
    
    
            /// <summary>
            /// 获取类型的默认值
            /// </summary>
            /// <param name="targetType"></param>
            /// <returns></returns>
            private static object DefaultForType(Type targetType)
            {
                object returnValue = null;
                returnValue = targetType == typeof(Int32) ? default(Int32) : returnValue;
                returnValue = targetType == typeof(Int64) ? default(Int64) : returnValue;
                returnValue = targetType == typeof(Boolean) ? default(Boolean) : returnValue;
                returnValue = targetType == typeof(DateTime) ? default(DateTime) : returnValue;
                returnValue = targetType == typeof(Double) ? default(Double) : returnValue;
                returnValue = targetType == typeof(float) ? default(float) : returnValue;
                returnValue = targetType == typeof(Decimal) ? default(Decimal) : returnValue;
                returnValue = targetType == typeof(Byte) ? default(Byte) : returnValue;
                returnValue = targetType == typeof(Char) ? default(Char) : returnValue;
                //returnValue = targetType == typeof(String) ? string.Empty : returnValue;
    
                return returnValue;
            }
    
            #endregion
    
        }
  • 相关阅读:
    PHP抓取网络数据的6种常见方法
    Linux scp 使用详解
    php.ini的配置
    VS2013中,将Qt的GUI程序改为控制台程序
    Matlab 摄像机标定+畸变校正
    Camera 3D概念
    旋转矩阵
    #pragma pack()用法详解
    【Boost】boost库获取格式化时间
    C/C++读写csv文件
  • 原文地址:https://www.cnblogs.com/Wolfmanlq/p/4183424.html
Copyright © 2011-2022 走看看