internal MethodSymbol Construct(ImmutableArray <TypeWithAnnotations> typeArguments) { if (!ReferenceEquals(this, ConstructedFrom) || this.Arity == 0) { throw new InvalidOperationException(); } if (typeArguments.IsDefault) { throw new ArgumentNullException(nameof(typeArguments)); } if (typeArguments.Any(NamedTypeSymbol.TypeWithAnnotationsIsNullFunction)) { throw new ArgumentException(CSharpResources.TypeArgumentCannotBeNull, nameof(typeArguments)); } if (typeArguments.Length != this.Arity) { throw new ArgumentException(CSharpResources.WrongNumberOfTypeArguments, nameof(typeArguments)); } if (ConstructedNamedTypeSymbol.TypeParametersMatchTypeArguments(this.TypeParameters, typeArguments)) { return(this); } return(new ConstructedMethodSymbol(this, typeArguments)); }
internal NamedTypeSymbol Construct(ImmutableArray <TypeSymbol> arguments, bool unbound) { if (!ReferenceEquals(this, ConstructedFrom) || this.Arity == 0) { throw new InvalidOperationException(); } if (arguments.IsDefault) { throw new ArgumentNullException("typeArguments"); } if (arguments.Any(NamedTypeSymbol.TypeSymbolIsNullFunction)) { throw new ArgumentException(CSharpResources.TypeArgumentCannotBeNull, "typeArguments"); } if (arguments.Length != this.Arity) { throw new ArgumentException(CSharpResources.WrongNumberOfTypeArguments, "typeArguments"); } Debug.Assert(!unbound || arguments.All(NamedTypeSymbol.TypeSymbolIsErrorType)); if (ConstructedNamedTypeSymbol.TypeParametersMatchTypeArguments(this.TypeParameters, arguments)) { return(this); } return(this.ConstructCore(arguments, unbound)); }