Pasar método de delegado e invocar argumentos dinámicamente

He hecho una pregunta similar antes, pero me está costando entender esto...

tengo un delegado...

delegate void assertDelegate(params object[] args);

y tengo un método que invoca al delegado...

public void assert(assertDelegate assertMethod, params object[] args) {
        string expectedValue;
        string actualValue;
        // derive value of 'expectedValue' and 'actualValue' from 'args'
        assertMethod.DynamicInvoke(expectedValue, actualValue);
    }

mi pensamiento fue que tiene que haber una manera de pasar la acción e invocar dinámicamente los argumentos para esa acción...

assert(Assert.AreEqual,new object[]{ HtmlDiv.PropertyNames.Id, "footer"});

pero me sale el error Expected a method with 'void AreEqual(params object[])' signature.

Tal vez estoy malinterpretando DynamicInvoke?

preguntado el 22 de mayo de 12 a las 15:05

el error que obtiene porque la firma de Assert.AreEqual y assertDelegate no es la misma -

¿Puedes explicar qué quieres hacer de forma más general? Puede usar la reflexión para invocar dinámicamente algún método pasado a la función y empujar parámetros:

¿Cuál es la firma de Assert.AreEqual? -

Existen alrededor de 20 variaciones de areEqual -

Es posible que me esté perdiendo algo, pero no veo los beneficios adicionales de este método que está tratando de crear. ¿Por qué no puedes llamar? Assert.Whatever en lugar de envolverlo en una oscura 'caja negra' que no hace nada por sí misma? -

1 Respuestas

delegate void assertDelegate(params object[] args);

La firma de este delegado no coincide con ninguna firma de Assert.AreEqual. Utilice en su lugar:

delegate void assertDelegate(string first, string second);

O un Func<string, string>.

contestado el 22 de mayo de 12 a las 16:05

@gabba De hecho, no lo hará. Esta es simplemente una sugerencia en caso de que OP use solo métodos de cadena a cadena. Él / ella es libre de hacer lo que se adapte a sus necesidades. - user703016

@gabba Ok, acabo de entender. ¡Gracias! - user703016

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.