Ограничение универсального типа CodeDom - PullRequest
12 голосов
/ 04 января 2009

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

Но в лучшем случае это обходной путь.

Ответы [ 2 ]

6 голосов
/ 10 июня 2009

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

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

В остальном используйте CodeTypeReference, как в в этом примере MSDN .

1 голос
/ 03 июня 2012

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

...