ChangeType() public static method

public static ChangeType ( Object value, Type conversionType ) : Object
value Object
conversionType Type
return Object
Ejemplo n.º 1
0
        public static T To <T>(this object obj, T defaultValue = default(T))
        {
            try
            {
                if (obj.IsNull())
                {
                    return(defaultValue);
                }

                if (obj is T)
                {
                    return((T)obj);
                }

                if (typeof(T) == typeof(Guid))
                {
                    return(obj.ToGuid <T>());
                }

                if (typeof(T) == typeof(bool))
                {
                    return(obj.ToBoolean <T>());
                }

                return((T)SystemConvert.ChangeType(obj, typeof(T)));
            }
            catch (Exception)
            {
                return(defaultValue);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Modifies the source data before passing it to the target for display in the UI.
        /// </summary>
        /// <param name="value">The source data being passed to the target.</param>
        /// <param name="targetType">The <see cref="T:System.Type"/> of data expected by the target dependency property.</param>
        /// <param name="parameter">An optional parameter to be used in the converter logic.</param>
        /// <param name="language">The culture of the conversion.</param>
        /// <returns>
        /// The value to be passed to the target dependency property.
        /// </returns>
        public object Convert(object value, Type targetType, object parameter, string language)
        {
            var result = 0;
            var offset = 0;

            if (parameter is int)
            {
                offset = (int)parameter;
            }
            else if (parameter is string)
            {
                int.TryParse((string)parameter, NumberStyles.Any, CultureInfo.InvariantCulture, out offset);
            }

            if (value != null)
            {
                result = (int)Converter.ChangeType(value, typeof(int), CultureInfo.InvariantCulture);

                var typeInfo = value.GetType().GetTypeInfo();

                if (typeInfo.IsClass || (typeInfo.IsGenericType && typeInfo.GetGenericTypeDefinition() == typeof(Nullable <>)))
                {
                    result++;
                }

                result += offset;
            }

            return(result);
        }
Ejemplo n.º 3
0
        ///// <summary>
        ///// 变更类型
        ///// </summary>
        ///// <param name="value">值</param>
        ///// <param name="type">类型</param>
        //public static object ChangeType(string value, Type type)
        //{
        //    object obj = null;
        //    var nullableType = Nullable.GetUnderlyingType(type);
        //    try
        //    {
        //        if (nullableType != null)
        //        {
        //            if (value == null)
        //                obj = null;
        //            else
        //                obj = OtherChangeType(value, type);
        //        }
        //        else if (typeof(Enum).IsAssignableFrom(type))
        //        {
        //            obj = Enum.Parse(type, value);
        //        }
        //        else
        //        {
        //            obj = Convert.ChangeType(value, type);
        //        }
        //        return obj;
        //    }
        //    catch
        //    {
        //        return default;
        //    }
        //}

        /// <summary>
        /// 变更类型
        /// </summary>
        /// <param name="value">值</param>
        /// <param name="type">类型</param>
        /// <param name="cell">单元格</param>
        public static object ChangeType(object value, Type type, ICell cell)
        {
            try
            {
                if (value == null && type.IsGenericType)
                {
                    return(Activator.CreateInstance(type));
                }
                if (value == null || string.IsNullOrWhiteSpace(value.ToString()))
                {
                    return(null);
                }
                if (type == value.GetType())
                {
                    return(value);
                }
                if (type.IsEnum)
                {
                    if (value is string)
                    {
                        return(Enum.Parse(type, value as string));
                    }
                    else
                    {
                        return(Enum.ToObject(type, value));
                    }
                }
                if (!type.IsInterface && type.IsGenericType)
                {
                    Type   innerType  = type.GetGenericArguments()[0];
                    object innerValue = ChangeType(value, innerType, cell);
                    return(Activator.CreateInstance(type, new object[] { innerValue }));
                }
                if (value is string && type == typeof(Guid))
                {
                    return(new Guid(value as string));
                }
                if (value is string && type == typeof(Version))
                {
                    return(new Version(value as string));
                }
                if (!(value is IConvertible))
                {
                    return(value);
                }
                return(Convert.ChangeType(value, type));
            }
            catch (Exception ex)
            {
                throw new OfficeDataConvertException($"值转换失败。输入值为: {value}, 目标类型为: {type.FullName}", ex)
                      {
                          PrimitiveType = value.GetType(),
                          TargetType    = type,
                          Value         = value,
                          RowIndex      = cell.RowIndex + 1,
                          ColumnIndex   = cell.ColumnIndex + 1,
                          Name          = cell.Name,
                      };
            }
        }
        private IfcValue ConvertToIfcValue(AttributeValue valueBaseType)
        {
            var decimalType = valueBaseType as DecimalAttributeValue;

            if (decimalType != null && decimalType.Value.HasValue)
            {
                return(new IfcReal((double)SystemConvert.ChangeType(decimalType.Value.Value, typeof(double))));
            }
            var stringType = valueBaseType as StringAttributeValue;

            if (stringType != null && !string.IsNullOrEmpty(stringType.Value))
            {
                return(new IfcText((string)SystemConvert.ChangeType(stringType.Value, typeof(string))));
            }
            var integerType = valueBaseType as IntegerAttributeValue;

            if (integerType != null)
            {
                return(new IfcInteger((int)SystemConvert.ChangeType(integerType.Value, typeof(int))));
            }
            var booleanType = valueBaseType as BooleanAttributeValue;

            if (booleanType != null)
            {
                return(new IfcBoolean((bool)SystemConvert.ChangeType(booleanType.Value, typeof(bool))));
            }
            return(default(IfcText));
        }
        /// <summary>
        /// Converts an attribute to the required type if possible
        /// </summary>
        /// <param name="attributeValue"></param>
        /// <typeparam name="TType"></typeparam>
        /// <returns></returns>
        public TType ConvertTo <TType>(AttributeValue attributeValue)
        {
            var decimalType = attributeValue as DecimalAttributeValue;

            if (decimalType != null && decimalType.Value.HasValue)
            {
                return((TType)SystemConvert.ChangeType(decimalType.Value.Value, typeof(TType)));
            }
            var stringType = attributeValue as StringAttributeValue;

            if (stringType != null && !string.IsNullOrWhiteSpace(stringType.Value))
            {
                return((TType)SystemConvert.ChangeType(stringType.Value, typeof(TType)));
            }
            var integerType = attributeValue as IntegerAttributeValue;

            if (integerType != null)
            {
                return((TType)SystemConvert.ChangeType(integerType.Value, typeof(TType)));
            }
            var booleanType = attributeValue as BooleanAttributeValue;

            if (booleanType != null)
            {
                return((TType)SystemConvert.ChangeType(booleanType.Value, typeof(TType)));
            }
            return(default(TType));
        }
        /// <summary>
        /// Converts a value to the given <see cref="TypeCode"/>.
        /// </summary>
        /// <param name="value">The object to convert.</param>
        /// <param name="typeCode">The <see cref="TypeCode"/> into which <paramref name="value"/> is converted.</param>
        /// <returns>The converted <paramref name="value"/> or null if the <paramref name="typeCode"/> parameter is <see cref="TypeCode.Empty"/>.</returns>
        public object Convert(object value, TypeCode typeCode)
        {
            if (value == null)
            {
                throw new ArgumentNullException(nameof(value));
            }

            return(SConvert.ChangeType(value, typeCode, CultureInfo.InvariantCulture));
        }
 private static object GetConvertibleValue(Type type, string value)
 {
     try
     {
         return(Convert.ChangeType(value, type));
     }
     catch (Exception)
     {
         return(null);
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// 将指定的 <see cref="IConvertible"/> 数字转换为其对应的对数。
 /// </summary>
 /// <param name="value">要转换的 <see cref="IConvertible"/> 数字。</param>
 /// <param name="targetType">绑定目标属性的类型。</param>
 /// <param name="parameter">表示对数的底的转换器参数。默认为常数 <see langword="e"/>。</param>
 /// <param name="culture">要用在转换器中的区域性。</param>
 /// <returns><paramref name="value"/> 的底为 <paramref name="parameter"/> 的对数。</returns>
 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
 {
     try
     {
         var number = Convertible.ToDouble(value ?? 0.0, culture);
         var @base  = Convertible.ToDouble(parameter ?? Math.E, culture);
         var result = Math.Log(number, @base);
         return(Convertible.ChangeType(result, targetType, culture));
     }
     catch (Exception) { return(DependencyProperty.UnsetValue); }
 }
        static object TryConvertPrimitiveType(object value, Type toType)
        {
            try
            {
                return(Convert.ChangeType(value, toType));
            }
            catch (InvalidCastException)
            {
            }
            catch (OverflowException)
            {
            }

            return(System.Activator.CreateInstance(toType));
        }
Ejemplo n.º 10
0
        public object CreateValueForField(object fieldValue)
        {
            object val = null;

            if (fieldValue == null)
            {
                if (mNullValue == null)
                {
                    if (mFieldType.IsValueType)
                    {
                        throw new BadUsageException("Null Value found. You must specify a NullValueAttribute in the " + mFieldInfo.Name +
                                                    " field of type " + mFieldInfo.FieldType.Name + ", because this is a ValueType.");
                    }
                    else
                    {
                        val = null;
                    }
                }
                else
                {
                    val = mNullValue;
                }
            }
            else if (mFieldType == (Type)fieldValue)
            {
                val = fieldValue;
            }
            else
            {
                if (mConvertProvider == null)
                {
                    val = Convert.ChangeType(fieldValue, mFieldType, null);
                }
                else
                {
                    try
                    {
                        val = Convert.ChangeType(fieldValue, mFieldType, null);
                    }
                    catch
                    {
                        val = mConvertProvider.StringToField(fieldValue.ToString());
                    }
                }
            }

            return(val);
        }
Ejemplo n.º 11
0
 public object ConvertBack(
     object value,
     Type targetType,
     object parameter,
     CultureInfo culture)
 {
     if (value == null)
     {
         return(null);
     }
     if (targetType.IsAssignableFrom(value.GetType()))
     {
         return(value);
     }
     return(SysConvert.ChangeType(value, targetType, culture));
 }
        public Expression Convert(object validator, Expression member)
        {
            var rangeAttr = (RangeAttribute)validator;

            if (rangeAttr.OperandType.Equals(member.Type))
            {
                return(Expression.AndAlso(
                           Expression.LessThanOrEqual(
                               Expression.Constant(TypeConverter.ChangeType(rangeAttr.Minimum, rangeAttr.OperandType), rangeAttr.OperandType),
                               member),
                           Expression.LessThanOrEqual(
                               member,
                               Expression.Constant(TypeConverter.ChangeType(rangeAttr.Maximum, rangeAttr.OperandType), rangeAttr.OperandType))));
            }
            else
            {
                return(Expression.Constant(true));
            }
        }
        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
        {
            var result = new object[targetTypes.Length];

            if (targetTypes.Length >= 1)
            {
                try
                {
                    result[0] = SystConvert.ChangeType(value, targetTypes[0]);
                }
                catch (Exception)
                {
                    result[0] = SystConvert.ChangeType(parameter, targetTypes[0]);
                }

                for (int i = 1; i < targetTypes.Length; i++)
                {
                    result[i] = true;
                }
            }

            return(result);
        }
Ejemplo n.º 14
0
		public static object Parse (Type enumType, string value, bool ignoreCase)
		{
			if (enumType == null)
				throw new ArgumentNullException ("enumType");

			if (value == null)
				throw new ArgumentNullException ("value");

			if (!enumType.IsEnum)
				throw new ArgumentException ("enumType is not an Enum type.", "enumType");

			value = value.Trim ();
			if (value.Length == 0)
				throw new ArgumentException ("An empty string is not considered a valid value.");

			MonoEnumInfo info;
			MonoEnumInfo.GetInfo (enumType, out info);

			// is 'value' a named constant?
			int loc = FindName (info.name_hash, info.names, value, ignoreCase);
			if (loc >= 0)
				return info.values.GetValue (loc);

			TypeCode typeCode = ((Enum) info.values.GetValue (0)).GetTypeCode ();

			// is 'value' a list of named constants?
			if (value.IndexOf (',') != -1) {
				string [] names = value.Split (split_char);
				ulong retVal = 0;
				for (int i = 0; i < names.Length; ++i) {
					loc = FindName (info.name_hash, info.names, names [i].Trim (), ignoreCase);
					if (loc < 0)
						throw new ArgumentException ("The requested value was not found.");
					retVal |= GetValue (info.values.GetValue (loc), typeCode);
				}
				return ToObject (enumType, retVal);
			}

			// is 'value' a number?
#if !NET_2_0
			try {
				return ToObject (enumType, Convert.ChangeType (value, typeCode));
			} catch (FormatException) {
				throw new ArgumentException (String.Format ("The requested value '{0}' was not found.", value));
			}
#else
			switch (typeCode) {
			case TypeCode.SByte:
				sbyte sb;
				if (SByte.TryParse (value, out sb))
					return ToObject (enumType, sb);
				break;
			case TypeCode.Byte:
				byte b;
				if (Byte.TryParse (value, out b))
					return ToObject (enumType, b);
				break;
			case TypeCode.Int16:
				short i16;
				if (Int16.TryParse (value, out i16))
					return ToObject (enumType, i16);
				break;
			case TypeCode.UInt16:
				ushort u16;
				if (UInt16.TryParse (value, out u16))
					return ToObject (enumType, u16);
				break;
			case TypeCode.Int32:
				int i32;
				if (Int32.TryParse (value, out i32))
					return ToObject (enumType, i32);
				break;
			case TypeCode.UInt32:
				uint u32;
				if (UInt32.TryParse (value, out u32))
					return ToObject (enumType, u32);
				break;
			case TypeCode.Int64:
				long i64;
				if (Int64.TryParse (value, out i64))
					return ToObject (enumType, i64);
				break;
			case TypeCode.UInt64:
				ulong u64;
				if (UInt64.TryParse (value, out u64))
					return ToObject (enumType, u64);
				break;
			default:
				break;
			}
			throw new ArgumentException (String.Format ("The requested value '{0}' was not found.", value));
#endif
		}
Ejemplo n.º 15
0
        internal object AssignFromString(ExtractedInfo fieldString, LineInfo line)
        {
            object val;

            switch (mTrimMode)
            {
            case TrimMode.None:
                break;

            case TrimMode.Both:
                fieldString.TrimBoth(mTrimChars);
                break;

            case TrimMode.Left:
                fieldString.TrimStart(mTrimChars);
                break;

            case TrimMode.Right:
                fieldString.TrimEnd(mTrimChars);
                break;
            }

            try
            {
                if (mConvertProvider == null)
                {
                    if (mIsStringField)
                    {
                        val = fieldString.ExtractedString();
                    }
                    else
                    {
                        // Trim it to use Convert.ChangeType
                        fieldString.TrimBoth(WhitespaceChars);

                        if (fieldString.Length == 0)
                        {
                            // Empty stand for null
                            val = GetNullValue();
                        }
                        else
                        {
                            val = Convert.ChangeType(fieldString.ExtractedString(), mFieldType, null);
                        }
                    }
                }

                else
                {
                    if (mConvertProvider.CustomNullHandling == false &&
                        fieldString.HasOnlyThisChars(WhitespaceChars))
                    {
                        val = GetNullValue();
                    }
                    else
                    {
                        var from = fieldString.ExtractedString();
                        val = mConvertProvider.StringToField(from);

                        if (val == null)
                        {
                            val = GetNullValue();
                        }
                    }
                }

                return(val);
            }
            catch (ConvertException ex)
            {
                var e = ConvertException.ReThrowException(ex, mFieldInfo.Name, line.mReader.LineNumber, fieldString.ExtractedFrom + 1);
                throw e;
            }
        }
Ejemplo n.º 16
0
 /// <summary>
 /// Converts given object to a value type using <see cref="Convert.ChangeType(object,System.Type)" /> method.
 /// </summary>
 /// <typeparam name="T">Type of the target object</typeparam>
 /// <param name="obj">Object to be converted</param>
 /// <returns>Converted object</returns>
 public static T To <T>(this object obj)
     where T : struct
 {
     return((T)Convert.ChangeType(obj, typeof(T), CultureInfo.InvariantCulture));
 }
Ejemplo n.º 17
0
        /// <summary>
        ///     动态调用IService 服务
        /// </summary>
        /// <param name="serviceString">服务名称:比如IServicer</param>
        /// <param name="methodString">方法名称:比如GetSingle</param>
        /// <param name="runInUrl">是否可以在Url中运行</param>
        /// <param name="paramaters">参数</param>
        public static Tuple <ServiceResult, object> ResolveMethod(string serviceString, string methodString,
                                                                  bool runInUrl = false, params object[] paramaters)
        {
            //var type = Reflection.GetAllServices().FirstOrDefault(e => e.Name.EndsWith(serviceString, StringComparison.OrdinalIgnoreCase));

            var instanse = Resolve(serviceString);

            if (instanse == null)
            {
                return(Tuple.Create(ServiceResult.FailedWithMessage($"未找到{serviceString}服务,检查拼写是否正确"), new object()));
            }

            var methods = instanse.GetType().GetMethods()
                          .Where(e => e.Name.Equals(methodString, StringComparison.OrdinalIgnoreCase));

            if (methods == null || methods.Count() < 0)
            {
                return(Tuple.Create(ServiceResult.FailedWithMessage($"未找到{methodString}方法,检查拼写是否正确"), new object()));
            }

            var method = methods.FirstOrDefault();

            if (method == null)
            {
                return(Tuple.Create(ServiceResult.FailedWithMessage($"未找到{methodString}方法,检查拼写是否正确"), new object()));
            }

            var instanseExpression = Expression.Convert(Expression.Constant(instanse), instanse.GetType());

            // 参数类型是否与当前方法匹配,同时获取参数
            var isMatching = false;

            ConstantExpression[] parameterExpressions = null;

            foreach (var item in methods)
            {
                method     = item;
                isMatching = true;
                if (paramaters != null && paramaters.Length > 0)
                {
                    parameterExpressions = new ConstantExpression[paramaters.Length];
                    var methodParameters = method.GetParameters();
                    // 参数数量是否相同
                    if (methodParameters.Count() != paramaters.Length)
                    {
                        isMatching = false;
                        continue;
                    }

                    for (var i = 0; i < paramaters.Length; i++)
                    {
                        try {
                            if (methodParameters[i].ParameterType == typeof(Guid))
                            {
                                parameterExpressions[i] = Expression.Constant(Guid.Parse(paramaters[i].ToString()),
                                                                              methodParameters[i].ParameterType);
                            }
                            else
                            {
                                parameterExpressions[i] = Expression.Constant(
                                    Convert.ChangeType(paramaters[i], methodParameters[i].ParameterType),
                                    methodParameters[i].ParameterType);
                            }
                        } catch (Exception ex) {
                            Console.WriteLine(ex.Message);
                            isMatching = false;
                        }
                    }
                }

                if (isMatching)
                {
                    break;
                }
            }

            // 如果方法在URl中执行,检查方法的安全设置
            if (runInUrl)
            {
                var attribute = method.GetAttribute <MethodAttribute>();
                if (attribute == null || attribute.RunInUrl == false)
                {
                    return(Tuple.Create(ServiceResult.FailedWithMessage("该方法未非安全方法,不能通过Url方式来执行,请设置Method特性"),
                                        new object()));
                }
            }

            if (isMatching == false)
            {
                return(Tuple.Create(ServiceResult.FailedWithMessage($"参数传递不正确,,检查参数是否与{serviceString}.{method}中的方法一样"),
                                    new object()));
            }

            var callExpression = parameterExpressions == null
                ? Expression.Call(instanseExpression, method)
                : Expression.Call(instanseExpression, method, parameterExpressions);

            if (method.ReturnType == typeof(void))
            {
                var lambdaExpression = Expression.Lambda <Action>(callExpression, null);
                lambdaExpression.Compile()();
                return(Tuple.Create(ServiceResult.Success, new object()));
            }
            else
            {
                var convertExpression = Expression.Convert(callExpression, typeof(object));
                var lambdaExpression  = Expression.Lambda <Func <object> >(convertExpression, null);
                var result            = lambdaExpression.Compile()();
                return(Tuple.Create(ServiceResult.Success, result));
            }
        }
Ejemplo n.º 18
0
        static System.Func <object, object> GetConverter(Type fromType, Type toType)
        {
            if (typeof(UnityObject).IsAssignableFrom(fromType))
            {
                if (toType.IsAssignableFrom(fromType))
                {
                    return(t => ConvertUnityObject(t, toType));
                }
                else
                {
                    return(null);
                }
            }

            Dictionary <System.Type, System.Func <object, object> > converters = null;

            if (!s_Converters.TryGetValue(fromType, out converters))
            {
                converters = new Dictionary <System.Type, System.Func <object, object> >();
                s_Converters.Add(fromType, converters);
            }


            System.Func <object, object> converter = null;
            if (!converters.TryGetValue(toType, out converter))
            {
                if (fromType == toType || toType.IsAssignableFrom(fromType))
                {
                    converter = t => t;
                }
                else if (toType.IsEnum && (fromType == typeof(uint) || fromType == typeof(int)))
                {
                    if (fromType == typeof(uint))
                    {
                        converter = t => Enum.ToObject(toType, (uint)t);
                    }
                    else
                    {
                        converter = t => Enum.ToObject(toType, (int)t);
                    }
                }
                else if (fromType.IsEnum && (toType == typeof(uint) || toType == typeof(int)))
                {
                    converter = t => Convert.ChangeType(t, toType);
                }
                else
                {
                    var implicitMethod = fromType.GetMethods(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public)
                                         .FirstOrDefault(m => m.Name == "op_Implicit" && m.ReturnType == toType);
                    if (implicitMethod != null)
                    {
                        converter = t => implicitMethod.Invoke(null, new object[] { t });
                    }
                    else
                    {
                        implicitMethod = toType.GetMethods(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public)
                                         .FirstOrDefault(m => m.Name == "op_Implicit" && m.GetParameters()[0].ParameterType == fromType && m.ReturnType == toType);
                        if (implicitMethod != null)
                        {
                            converter = t => implicitMethod.Invoke(null, new object[] { t });
                        }
                    }
                    if (converter == null)
                    {
                        if (toType.IsPrimitive)
                        {
                            if (fromType.IsPrimitive)
                            {
                                converter = t => TryConvertPrimitiveType(t, toType);
                            }
                            else if (toType != typeof(float))
                            {
                                var floatConverter = GetConverter(fromType, typeof(float));
                                if (floatConverter != null)
                                {
                                    converter = t => TryConvertPrimitiveType(floatConverter(t), toType);
                                }
                            }
                        }
                    }
                }
                converters.Add(toType, converter);
            }

            return(converter);
        }
Ejemplo n.º 19
0
        public static T LastOrNull <T>(this IEnumerable <T> enumerable)
        {
            var en = enumerable as T[] ?? enumerable.ToArray();

            return(en.Any() ? en.Last() : (T)Convert.ChangeType(null, typeof(T)));
        }
Ejemplo n.º 20
0
 public static T EvalToType <T>(string expression)
 {
     _CheckMono();
     return(( T )Convert.ChangeType(EvalToObject(expression), typeof(T)));
 }
Ejemplo n.º 21
0
 public object Convert(object value, TypeCode typeCode)
     => SystemConvert.ChangeType(value, typeCode);