CodeDom generische Typeinschränkung
Frage
Gibt es eine Möglichkeit, eine Klasse Constraint mit CodeDom zu erzeugen.
Weil, wenn ich so etwas wie
var method = new CodeMemberMethod();
var genericParam = new CodeTypeParameter("InterfaceType");
genericParam.Constraints.Add("class");
method.TypeParameters.Add(genericParam);
der generierte Code ist wie
private InterfaceType GetImpl<InterfaceType>()
where InterfaceType : @class
{
}
Die beste Abhilfe i gefunden ist eine führende Leerzeichen vor der Klasse zu verwenden,
genericParam.Constraints.Add(" class");
Dies scheint aber bestenfalls eine Abhilfe zu sein.
Lösung
Es scheint, dass es keine straigntforward Art und Weise ist, dass die Einschränkung angeben. Weder für die "Struktur" Constraint .
Für die "T: new ()" Einschränkung verwenden, um die Flagge HasConstructorConstraint
Für die übrigen Codetypereference wie in diesem Msdn Beispiel verwenden .
Andere Tipps
Ich benutze auch Null-Breite Raum ("\x200Bclass"
) anstelle von normalen Raum. Dann habe ich es in final String mit leeren String ersetzen: .Replace("\x200B", string.Empty);