简体   繁体   中英

CodeDom generic type constraint

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.

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 .

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM