Ответ 1
Кажется, что нет никакого прямого способа указать это ограничение. для ограничения "struct" .
Для ограничения "T: new()" используйте флаг HasConstructorConstraint
Для остальных используйте CodeTypeReference, как в этот пример msdn.
Есть ли способ сгенерировать ограничение класса с помощью CodeDom.
Потому что, когда я использую что-то вроде
var method = new CodeMemberMethod();
var genericParam = new CodeTypeParameter("InterfaceType");
genericParam.Constraints.Add("class");
method.TypeParameters.Add(genericParam);
сгенерированный код похож на
private InterfaceType GetImpl<InterfaceType>()
where InterfaceType : @class
{
}
Лучшим обходным решением, которое я нашел, является использование ведущего пробела перед классом
genericParam.Constraints.Add(" class");
Но это, кажется, в лучшем случае обходное решение.
Кажется, что нет никакого прямого способа указать это ограничение. для ограничения "struct" .
Для ограничения "T: new()" используйте флаг HasConstructorConstraint
Для остальных используйте CodeTypeReference, как в этот пример msdn.
Я также использую пространство с нулевой шириной ("\x200Bclass"
) вместо нормального пространства. Затем я заменю его в финальной строке пустой строкой: .Replace("\x200B", string.Empty);