예제 #1
0
            /// <summary>
            /// Converts the supplied value to a base type using the corresponding FudgeFieldType definition. The supplied .NET type
            /// is resolved to a registered FudgeFieldType. The <c>ConvertValueFrom</c> method on the registered type is then used
            /// to convert the value.
            /// </summary>
            /// <param name="value">value to convert</param>
            /// <param name="type">.NET target type</param>
            /// <returns>the converted value</returns>
            public object ConvertType(object value, Type type)
            {
                if (value == null)
                {
                    return(null);
                }
                if (value.GetType() == type)
                {
                    return(value);
                }

                if (!type.IsAssignableFrom(value.GetType()))
                {
                    FudgeFieldType fieldType = typeDictionary.GetByCSharpType(type);
                    if (fieldType == null)
                    {
                        throw new InvalidCastException("No registered field type for " + type.Name);
                    }

                    value = fieldType.ConvertValueFrom(value);
                }
                return(value);
            }