12

Is there a way to generate a class constraint with CodeDom.

Because when I use something like

var method = new CodeMemberMethod();
var genericParam = new CodeTypeParameter("InterfaceType");
genericParam.Constraints.Add("class");
method.TypeParameters.Add(genericParam);

the generated code is like

private InterfaceType GetImpl<InterfaceType>()
    where InterfaceType : @class
{
}

The best workaround i found is to use a leading whitespace before the class

genericParam.Constraints.Add(" class");

But this seems to be at best a workaround.

Massimiliano
  • 16,770
  • 10
  • 69
  • 112
Fionn
  • 10,975
  • 11
  • 54
  • 84

2 Answers2

7

It seems that there is no straigntforward way to specify that constraint. Neither for the "struct" constraint.

For the "T : new()" constraint use the flag HasConstructorConstraint

For the rest use CodeTypeReference as in this msdn example.

Massimiliano
  • 16,770
  • 10
  • 69
  • 112
1

I also use zero-width space ("\x200Bclass") instead of normal space. Then I replace it in final string with empty string: .Replace("\x200B", string.Empty);

IS4
  • 11,945
  • 2
  • 47
  • 86