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)); }