/// <summary>
        /// Is overridden to define how the type reference is translated by this strategy.
        /// </summary>
        /// <param name="referencedType">Type reference that should be tranlated.</param>
        /// <param name="translator">Full translator that can be used to translate parts of the complete type reference.</param>
        /// <returns>Result of the translation.</returns>
        protected override TypeReferenceTranslationResult Translate(Type referencedType, ITypeReferenceTranslator translator)
        {
            var translatedTypeArguments = referencedType.GetGenericArguments().Select(translator.Translate);
            var referencedTypeName      = referencedType.GetNameWithoutGenericTypeParameters()
                                          + $"<{ string.Join(", ", translatedTypeArguments.Select(x => x.ReferencedTypeName)) }>";

            return(new TypeReferenceTranslationResult(referencedTypeName,
                                                      CodeDependencies.FromCodeFragments(new[] { CodeFragmentId.ForClrType(referencedType.GetGenericTypeDefinition()) })
                                                      .Merge(translatedTypeArguments.Aggregate(CodeDependencies.Empty, (x, n) => x.Merge(n.Dependencies)))));
        }
예제 #2
0
 /// <summary>
 /// Is overridden to define how the type reference is translated by this strategy.
 /// </summary>
 /// <param name="referencedType">Type reference that should be tranlated.</param>
 /// <param name="translator">Full translator that can be used to translate parts of the complete type reference.</param>
 /// <returns>Result of the translation.</returns>
 public TypeReferenceTranslationResult Translate(Type referencedType)
 => new TypeReferenceTranslationResult(
     referencedType.Name,
     CodeDependencies.FromCodeFragments(new[] { CodeFragmentId.ForClrType(referencedType) }));