Pergunta

Existe uma maneira para gerar uma restrição de classe com CodeDom.

Porque quando eu usar algo como

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

o código gerado é como

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

A melhor solução que eu encontrei é usar um espaço em branco que conduz antes a classe

genericParam.Constraints.Add(" class");

Mas este parece ser na melhor das hipóteses uma solução alternativa.

Foi útil?

Solução

Parece que não há nenhuma maneira straigntforward para especificar essa restrição. Nem para o "struct" restrição .

Para o "T: new ()" uso restrição a bandeira HasConstructorConstraint

Para a utilização resto CodeTypeReference como em este exemplo MSDN .

Outras dicas

Eu também usar o espaço de largura zero ("\x200Bclass") em vez de espaço normal. Então eu substituí-lo na cadeia final com string vazia: .Replace("\x200B", string.Empty);

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top