private static bool TryConvertAsPrimitiveType(TypeCode typeCode, IEdmValue edmValue, out object clrValue)
        {
            TypeCode typeCode1 = typeCode;

            switch (typeCode1)
            {
            case TypeCode.Boolean:
            {
                clrValue = EdmToClrConverter.AsClrBoolean(edmValue);
                return(true);
            }

            case TypeCode.Char:
            {
                clrValue = EdmToClrConverter.AsClrChar(edmValue);
                return(true);
            }

            case TypeCode.SByte:
            {
                clrValue = (sbyte)EdmToClrConverter.AsClrInt64(edmValue);
                return(true);
            }

            case TypeCode.Byte:
            {
                clrValue = EdmToClrConverter.AsClrByte(edmValue);
                return(true);
            }

            case TypeCode.Int16:
            {
                clrValue = EdmToClrConverter.AsClrInt16(edmValue);
                return(true);
            }

            case TypeCode.UInt16:
            {
                clrValue = (ushort)EdmToClrConverter.AsClrInt64(edmValue);
                return(true);
            }

            case TypeCode.Int32:
            {
                clrValue = EdmToClrConverter.AsClrInt32(edmValue);
                return(true);
            }

            case TypeCode.UInt32:
            {
                clrValue = (uint)EdmToClrConverter.AsClrInt64(edmValue);
                return(true);
            }

            case TypeCode.Int64:
            {
                clrValue = EdmToClrConverter.AsClrInt64(edmValue);
                return(true);
            }

            case TypeCode.UInt64:
            {
                clrValue = (ulong)EdmToClrConverter.AsClrInt64(edmValue);
                return(true);
            }

            case TypeCode.Single:
            {
                clrValue = EdmToClrConverter.AsClrSingle(edmValue);
                return(true);
            }

            case TypeCode.Double:
            {
                clrValue = EdmToClrConverter.AsClrDouble(edmValue);
                return(true);
            }

            case TypeCode.Decimal:
            {
                clrValue = EdmToClrConverter.AsClrDecimal(edmValue);
                return(true);
            }

            case TypeCode.DateTime:
            {
                clrValue = EdmToClrConverter.AsClrDateTime(edmValue);
                return(true);
            }

            case TypeCode.Object | TypeCode.DateTime:
            {
                clrValue = null;
                return(false);
            }

            case TypeCode.String:
            {
                clrValue = EdmToClrConverter.AsClrString(edmValue);
                return(true);
            }

            default:
            {
                clrValue = null;
                return(false);
            }
            }
        }
        private object AsClrValue(IEdmValue edmValue, Type clrType, bool convertEnumValues)
        {
            object   obj      = null;
            TypeCode typeCode = PlatformHelper.GetTypeCode(clrType);

            if (typeCode != TypeCode.Object)
            {
                bool flag = clrType.IsEnum();
                if (flag)
                {
                    IEdmEnumValue edmEnumValue = edmValue as IEdmEnumValue;
                    if (edmEnumValue != null)
                    {
                        edmValue = edmEnumValue.Value;
                    }
                }
                if (EdmToClrConverter.TryConvertAsPrimitiveType(PlatformHelper.GetTypeCode(clrType), edmValue, out obj))
                {
                    if (!flag || !convertEnumValues)
                    {
                        return(obj);
                    }
                    else
                    {
                        return(this.GetEnumValue(obj, clrType));
                    }
                }
                else
                {
                    throw new InvalidCastException(Strings.EdmToClr_UnsupportedTypeCode(typeCode));
                }
            }
            else
            {
                if (!clrType.IsGenericType() || !(clrType.GetGenericTypeDefinition() == EdmToClrConverter.TypeNullableOfT))
                {
                    if (clrType != typeof(DateTime))
                    {
                        if (clrType != typeof(DateTimeOffset))
                        {
                            if (clrType != typeof(TimeSpan))
                            {
                                if (clrType != typeof(byte[]))
                                {
                                    if (!clrType.IsGenericType() || !clrType.IsInterface() || !(clrType.GetGenericTypeDefinition() == EdmToClrConverter.TypeICollectionOfT) && !(clrType.GetGenericTypeDefinition() == EdmToClrConverter.TypeIListOfT) && !(clrType.GetGenericTypeDefinition() == EdmToClrConverter.TypeIEnumerableOfT))
                                    {
                                        return(this.AsClrObject(edmValue, clrType));
                                    }
                                    else
                                    {
                                        return(this.AsListOfT(edmValue, clrType));
                                    }
                                }
                                else
                                {
                                    return(EdmToClrConverter.AsClrByteArray(edmValue));
                                }
                            }
                            else
                            {
                                return(EdmToClrConverter.AsClrTime(edmValue));
                            }
                        }
                        else
                        {
                            return(EdmToClrConverter.AsClrDateTimeOffset(edmValue));
                        }
                    }
                    else
                    {
                        return(EdmToClrConverter.AsClrDateTime(edmValue));
                    }
                }
                else
                {
                    if (edmValue as IEdmNullValue == null)
                    {
                        return(this.AsClrValue(edmValue, clrType.GetGenericArguments().Single <Type>()));
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
        }