CodeDom - Llama a un método genérico
Pregunta
¿Alguien sabe una forma de llamar a un método genérico de una clase base con CodeDom?
No tengo problemas para llamar a un método estándar, pero no puedo encontrar una solución para llamar al genérico.
El código que utilizo para llamar al método de clase base estándar GetInstance:
CodeAssignStatement assignStatement = new CodeAssignStatement(
new CodeVariableReferenceExpression("instance"),
new CodeMethodInvokeExpression(
new CodeThisReferenceExpression(),
"GetInstance",
new CodeExpression[] { new CodeVariableReferenceExpression("instance") }
));
Solución
Puede encontrar su respuesta aquí en msdn :
desplácese hacia abajo hasta el ejemplo de C # (CodeDomGenericsDemo).
Se genera un método genérico:
public virtual void Print<S, T>()
where S : new()
{
Console.WriteLine(default(T));
Console.WriteLine(default(S));
}
y luego ejecutado en el ejemplo:
dict.Print<decimal, int>();
El código para generar la llamada al método:
methodMain.Statements.Add(new CodeExpressionStatement(
new CodeMethodInvokeExpression(
new CodeMethodReferenceExpression(
new CodeVariableReferenceExpression("dict"),
"Print",
new CodeTypeReference[] {
new CodeTypeReference("System.Decimal"),
new CodeTypeReference("System.Int32"),}),
new CodeExpression[0])));
(Usarías CodeThisReferenceExpression () o CodeBaseReferenceExpression () en lugar de CodeVariableReferenceExpression), no estoy seguro de si eso es lo que quieres decir al llamar al método de clase base estándar.