0
我們正在使用CodeDom編寫代理生成器,並且似乎沒有生成遞歸約束中的泛型類型。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<, >
{
}