Exemple #1
0
        public static NamedTypeSymbol AsUnboundGenericType(this NamedTypeSymbol type)
        {
            if (!type.IsGenericType)
            {
                // This exception is part of the public contract of NamedTypeSymbol.ConstructUnboundGenericType
                throw new InvalidOperationException();
            }

            var             original = type.OriginalDefinition;
            int             n        = original.Arity;
            NamedTypeSymbol originalContainingType = original.ContainingType;

            var constructedFrom =
                ((object)originalContainingType == null)
                    ? original
                    : original.AsMember(
                    originalContainingType.IsGenericType
                            ? originalContainingType.AsUnboundGenericType()
                            : originalContainingType
                    );

            if (n == 0)
            {
                return(constructedFrom);
            }

            var typeArguments = UnboundArgumentErrorTypeSymbol.CreateTypeArguments(
                constructedFrom.TypeParameters,
                n,
                new CSDiagnosticInfo(ErrorCode.ERR_UnexpectedUnboundGenericName)
                );

            return(constructedFrom.Construct(typeArguments, unbound: true));
        }