CodeDom を使用してプロキシ ジェネレーターを作成していますが、再帰制約のジェネリック型が生成されていないようです。
問題のコードは、制約をそのまま渡す必要があります。
void AddGenericConstraints(CodeTypeDeclaration generatedType, Type type)
{
var genericTypes = type.GetGenericArguments();
foreach (var genericType in genericTypes)
{
var codeTypeParameter = new CodeTypeParameter(genericType.Name);
if (genericType.IsGenericParameter)
{
// Get the constraints if the constraint is of user defined type
var genericParameterConstraints = genericType.GetGenericParameterConstraints();
foreach (var constraint in genericParameterConstraints)
{
if (!string.Equals(constraint.Name, "ValueType"))
{
codeTypeParameter.Constraints.Add(constraint);
}
}
}
generatedType.TypeParameters.Add(codeTypeParameter);
}
しかし、入力:
interface ISomething<T, out TSelf> where TSelf : ISomething<T, TSelf>
{
}
出力を生成します (コンパイルされません):
interface ISomething<T, TSelf> where TSelf : ISomething<, >
{
}