Beispiel #1
0
        public static object GetDefaultFieldValue(AstType type, IMemberResolver resolver)
        {
            if (type is PrimitiveType)
            {
                var primitiveType = (PrimitiveType)type;

                switch (primitiveType.KnownTypeCode)
                {
                case KnownTypeCode.Decimal:
                    return(0m);

                case KnownTypeCode.Int16:
                case KnownTypeCode.Int32:
                case KnownTypeCode.Int64:
                case KnownTypeCode.UInt16:
                case KnownTypeCode.UInt32:
                case KnownTypeCode.UInt64:
                case KnownTypeCode.Byte:
                case KnownTypeCode.Double:
                case KnownTypeCode.SByte:
                case KnownTypeCode.Single:
                    return(0);

                case KnownTypeCode.Boolean:
                    return(false);

                case KnownTypeCode.Char:
                    return((int)'0');
                }
            }

            var resolveResult = resolver.ResolveNode(type, null);

            if (resolveResult.Type.Kind == TypeKind.TypeParameter)
            {
                if (resolveResult.Type.IsReferenceType == null || resolveResult.Type.IsReferenceType == false)
                {
                    return(new RawString(type.ToString() + '.' + TransformCtx.DefaultInvoke));
                }
            }

            if (!resolveResult.IsError && NullableType.IsNullable(resolveResult.Type))
            {
                return(null);
            }

            if (!resolveResult.IsError && resolveResult.Type.Kind == TypeKind.Enum)
            {
                return(0);
            }

            if (!resolveResult.IsError && resolveResult.Type.Kind == TypeKind.Struct)
            {
                return(type);
            }

            return(null);
        }
Beispiel #2
0
        public static object GetDefaultFieldValue(AstType type, IMemberResolver resolver)
        {
            if (type is PrimitiveType)
            {
                var primitiveType = (PrimitiveType)type;

                switch (primitiveType.KnownTypeCode)
                {
                case KnownTypeCode.Decimal:
                    return(0m);

                case KnownTypeCode.Int64:
                    return(0L);

                case KnownTypeCode.UInt64:
                    return(0UL);

                case KnownTypeCode.Int16:
                case KnownTypeCode.Int32:
                case KnownTypeCode.UInt16:
                case KnownTypeCode.UInt32:
                case KnownTypeCode.Byte:
                case KnownTypeCode.Double:
                case KnownTypeCode.SByte:
                case KnownTypeCode.Single:
                    return(0);

                case KnownTypeCode.Boolean:
                    return(false);
                }
            }

            var resolveResult = resolver.ResolveNode(type, null);

            var o = GetDefaultFieldValue(resolveResult.Type, type, false);

            if (o != null)
            {
                return(o);
            }

            if (!resolveResult.IsError && NullableType.IsNullable(resolveResult.Type))
            {
                return(null);
            }

            if (!resolveResult.IsError && (resolveResult.Type.IsKnownType(KnownTypeCode.Enum) || resolveResult.Type.Kind == TypeKind.Enum))
            {
                return(0);
            }

            if (!resolveResult.IsError && resolveResult.Type.Kind == TypeKind.Struct)
            {
                return(type);
            }

            return(null);
        }
Beispiel #3
0
        public static object GetDefaultFieldValue(AstType type, IMemberResolver resolver)
        {
            if (type is PrimitiveType)
            {
                var primitiveType = (PrimitiveType)type;

                switch (primitiveType.KnownTypeCode)
                {
                    case KnownTypeCode.Decimal:
                        return 0m;

                    case KnownTypeCode.Int16:
                    case KnownTypeCode.Int32:
                    case KnownTypeCode.Int64:
                    case KnownTypeCode.UInt16:
                    case KnownTypeCode.UInt32:
                    case KnownTypeCode.UInt64:
                    case KnownTypeCode.Byte:
                    case KnownTypeCode.Double:
                    case KnownTypeCode.SByte:
                    case KnownTypeCode.Single:
                        return 0;

                    case KnownTypeCode.Boolean:
                        return false;
                }
            }

            var resolveResult = resolver.ResolveNode(type, null);

            if (!resolveResult.IsError && NullableType.IsNullable(resolveResult.Type))
            {
                return null;
            }

            if (!resolveResult.IsError && resolveResult.Type.Kind == TypeKind.Enum)
            {
                return 0;
            }

            if (!resolveResult.IsError && resolveResult.Type.Kind == TypeKind.Struct)
            {
                return type;
            }

            return null;
        }