コード例 #1
0
        /// <summary>
        /// 类型转换(string转换,如果转换失败则返回类型的默认值)
        /// </summary>
        /// <typeparam name="T">目标类型</typeparam>
        /// <param name="value">需要转换的值</param>
        /// <param name="defaultValue">默认值</param>
        /// <returns>转换结果</returns>
        public static T To <T>(this string value, T defaultValue = default(T))
        {
            try
            {
                value = (value ?? string.Empty).Trim();
                dynamic returnValue = defaultValue;
                if (string.IsNullOrWhiteSpace(value))
                {
                    return(returnValue);
                }

                var          type       = typeof(T);
                IChangeValue changeType = null;
                if (SingletonNew <ConcurrentDictionary <Type, IChangeValue> > .Instance.TryGetValue(type, out changeType))
                {
                    if (changeType != null)
                    {
                        dynamic changeValue = changeType;
                        var     change      = changeValue.CheckAndChange(value);
                        if (change.HasChange)
                        {
                            return(change.ChangeResult);
                        }
                        return(returnValue);
                    }
                }
                if (type.IsEnum)
                {
                    if (value.IsCheckType <int>())
                    {
                        returnValue = Enum.ToObject(type, int.Parse(value));
                    }
                    return(returnValue);
                }

                return((T)value.ToObject(typeof(T), CultureInfo.InvariantCulture));
            }
            catch
            {
                return(defaultValue);
            }
        }
コード例 #2
0
        /// <summary>
        /// 类型判断
        /// </summary>
        /// <typeparam LanguageName="TEntity">需要判断的类型</typeparam>
        /// <param name="value">判断的对象</param>
        /// <returns>判断的结果</returns>
        public static bool IsCheckType <T>(this string value)
        {
            value = (value ?? string.Empty).Trim();
            if (string.IsNullOrWhiteSpace(value))
            {
                return(false);
            }
            var type = typeof(T);

            IChangeValue changeType = null;

            if (!SingletonNew <ConcurrentDictionary <Type, IChangeValue> > .Instance.TryGetValue(type, out changeType))
            {
                return(false);
            }

            if (changeType != null)
            {
                dynamic changeValue = changeType;
                return(changeValue.CheckAndChange(value).HasChange);
            }

            return(false);
        }