0

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<, >
{
}
4

1 に答える 1