Domanda

Esiste un modo per generare un vincolo di classe con CodeDom.

Perché quando uso qualcosa del genere

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

il codice generato è come

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

La migliore soluzione che ho trovato è usare uno spazio bianco prima della lezione

genericParam.Constraints.Add(" class");

Ma questo sembra essere nella migliore delle ipotesi una soluzione alternativa.

È stato utile?

Soluzione

Sembra che non ci sia un modo diretto per specificare quel vincolo. Né per " struct " vincolo.

Per " T: new () " il vincolo usa il flag HasConstructorConstraint

Per il resto usa CodeTypeReference come in questo esempio msdn .

Altri suggerimenti

Uso anche lo spazio a larghezza zero ( " \ x200Bclass " ) anziché lo spazio normale. Quindi lo sostituisco nella stringa finale con stringa vuota: .Replace (" \ x200B " ;, string.Empty);

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top