2012-09-13 21 views

Respuesta

56

El underlying expression tree API no admite argumentos opcionales.

Para el código compilado de IL, el compilador de C# inserta los valores predeterminados en tiempo de compilación (código fijo), porque CLR no admite los métodos de invocación con argumentos opcionales cuando los argumentos no se proporcionan explícitamente.

+2

¿Esto de alguna manera incluye sobrecargas? Estaba recibiendo esto cuando hice una sobrecarga. Algo así como el vacío Blah (cadena a) y el vacío Blah (objeto a). Cuando traté de MOQ una llamada a la versión con objeto, me dio este error. – vbullinger

+4

Las sobrecargas son totalmente compatibles en el sentido de que una sobrecarga particular se codificará en el árbol. – usr

+0

Mensaje de error bastante críptico, pero esta respuesta mostró el camino, tenía el parámetro opcional con valor predeterminado en el método que estaba tratando de simular. – vpalmu

14

Tenía el mismo mensaje al intentar usar Mock.setup para simular un método con varios parámetros predeterminados. Solo tuve que agregar los parámetros adicionales en la lambda.

void someMethod(string arg1 = "", string arg2 = "") 

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>() 
Cuestiones relacionadas