Как сгенерировать Variadi c как класс Generics? - PullRequest
0 голосов
/ 31 марта 2020

То, что я хочу, это просто:

public class Collection<T1,...TN> where T1...TN : SomeClass {
    public static Type[] types = {typeof(T1)...typeof(TN)}
}

Как можно сгенерировать такие базовые классы для Ns от 1 до N (скажем, по умолчанию 40)?

Я закончил с чем-то вроде этот шаблон .tt:

<#@ template hostspecific="false" language="C#" #>
<#@ output extension=".cs" #>

using System;
using System.Collections.Generic;
using System.Text;

namespace Services
{

    public interface ICollections {
        public Type[] Types {get;}
    }

<#
int top = 10;
for (int i = 0; i<=top; i++)

{ #>
    public class Collections< <# for (int j = 0; j<=i; j++) {#> T<#=j#> <#= (j<i  )?(","):(" ") #> <# }#> > : ICollections <# for (int j = 0; j<=i; j++) {#> 
    where T<#=j#> : SomeClass <# }#>
    {
        public Type[] Types => new[] { <# for (int j = 0; j<=i; j++) {#> typeof(T<#=j#>) <#= (j<i  )?(","):(" ") #> <# }#>};
    }
<# } #>
}
...