Ограничение общего типа CodeDom

Есть ли способ сгенерировать ограничение класса с помощью 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");

Но это, кажется, в лучшем случае обходное решение.

Ответ 1

Кажется, что нет никакого прямого способа указать это ограничение. для ограничения "struct" .

Для ограничения "T: new()" используйте флаг HasConstructorConstraint

Для остальных используйте CodeTypeReference, как в этот пример msdn.

Ответ 2

Я также использую пространство с нулевой шириной ("\x200Bclass") вместо нормального пространства. Затем я заменю его в финальной строке пустой строкой: .Replace("\x200B", string.Empty);