コード例 #1
0
        private static ImmutableArray<TypeSymbol> GetTypeArguments(ImmutableArray<TypeParameterSymbol> definitionTypeParameters, AbstractTypeParameterMap currentTypeMap, AbstractTypeParameterMap typeSubstitutionOpt)
        {
            var typeArguments = ImmutableArray.CreateBuilder<TypeSymbol>(definitionTypeParameters.Length);

            foreach (var typeParameterSymbol in definitionTypeParameters)
            {
                if (typeSubstitutionOpt != null)
                {
                    var substitutedType = currentTypeMap.SubstituteType(typeParameterSymbol);
                    if (!object.ReferenceEquals(substitutedType, typeParameterSymbol))
                    {
                        typeArguments.Add(currentTypeMap.SubstituteType(substitutedType));
                    }
                    else
                    {
                        var substitutedTypeOpt = typeSubstitutionOpt.SubstituteType(typeParameterSymbol.OriginalDefinition);
                        typeArguments.Add(currentTypeMap.SubstituteType(substitutedTypeOpt));
                    }
                }
                else
                {
                    typeArguments.Add(currentTypeMap.SubstituteType(typeParameterSymbol));
                }
            }

            return typeArguments.ToImmutableArray();
        }