То, что я хочу, это просто:
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 )?(","):(" ") #> <# }#>};
}
<# } #>
}