コード例 #1
0
ファイル: TypeSpecifier.cs プロジェクト: ysx1993/netprints
        /// <summary>
        /// Creates a TypeSpecifier for a given type.
        /// </summary>
        /// <param name="type">Type to create a TypeSpecifier for.</param>
        /// <returns>TypeSpecifier for the given type.</returns>
        public static TypeSpecifier FromType(Type type)
        {
            if (type.IsGenericParameter)
            {
                throw new ArgumentException(nameof(type));
            }

            string typeName = type.Name.Split('`').First();

            if (!string.IsNullOrEmpty(type.Namespace))
            {
                typeName = type.Namespace + "." + typeName;
            }

            TypeSpecifier typeSpecifier = new TypeSpecifier(typeName,
                                                            type.IsSubclassOf(typeof(Enum)),
                                                            type.IsInterface);

            foreach (Type genType in type.GetGenericArguments())
            {
                if (genType.IsGenericParameter)
                {
                    // TODO: Convert and add constraints
                    typeSpecifier.GenericArguments.Add(GenericType.FromType(genType));
                }
                else
                {
                    typeSpecifier.GenericArguments.Add(TypeSpecifier.FromType(genType));
                }
            }

            return(typeSpecifier);
        }
コード例 #2
0
ファイル: TypeSpecifier.cs プロジェクト: InflexCZE/Phenol
        /// <summary>
        /// Creates a TypeSpecifier for a given type.
        /// </summary>
        /// <param name="type">Type to create a TypeSpecifier for.</param>
        /// <returns>TypeSpecifier for the given type.</returns>
        public static TypeSpecifier FromType(Type type)
        {
            if (type.IsGenericParameter)
            {
                throw new ArgumentException(nameof(type));
            }

            var typeSpecifier = new TypeSpecifier
                                (
                TypeName(type),
                type.IsSubclassOf(typeof(Enum)),
                type.IsInterface,
                typeof(Delegate).IsAssignableFrom(type)
                                );

            foreach (Type genType in type.GetGenericArguments())
            {
                if (genType.IsGenericParameter)
                {
                    // TODO: Convert and add constraints
                    typeSpecifier.GenericArguments.Add(GenericType.FromType(genType));
                }
                else
                {
                    typeSpecifier.GenericArguments.Add(TypeSpecifier.FromType(genType));
                }
            }

            return(typeSpecifier);
        }