Pregunta

Llamar a un constructor interna con un argumento dinámico en C resultados # 4.0b en la siguiente excepción

  

System.ArgumentNullException: Valor   no puede ser nulo. Nombre de parámetro:   constructor

código Ejemplo (gracias a Jon Skeet)

public class Test
{
    internal Test(string x)
    {
    }

    static void Main()
    {
        dynamic d = "";
        new Test(d);
    }
}

Parece que el tiempo de ejecución no tiene en cuenta los constructores internos cuando se trata de elegir el más adecuado. Esto parece ser un error, así que lo publicó en conexion: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback. aspx? FeedbackID = 472924

Parece que lo arreglaron para la nueva versión.

¿Fue útil?

Solución

EDIT: Bueno, he ahora lo rastreó mucho más lejos - se trata de utilizar un constructor interno que causa un problema

.

Aquí hay un realmente ejemplo corta pero completa que demuestra el problema:

public class Test
{
    internal Test(string x)
    {
    }

    static void Main()
    {
        dynamic d = "";
        new Test(d);
    }
}

Le sugiero que se conecte esto con cuate - y luego publicar la URL aquí y podemos votar sobre ella :)

(Mi conjetura es que el interior del DLR hay una llamada a getConstructor sin la BindingFlags.NonPublic apropiada, pero eso es sólo una suposición ...)

Otros consejos

Sin ver el código sugeriría que usted está pasando una clase no instanciada a su constructor. Asegúrese de que estén dentro del alcance y se han instanciado por ejemplo por el uso de la nueva, antes de que pasen a su objeto no dinámico.

Editar

Al ver su código sugeriría que utilice DynamicObject en lugar de dinámica para su ayudante costructor y la propiedad Entidad.

Editar después de ver la respuesta de Jon

Creo que el problema es en el uso del método GetEntity () para generar la instancia de objeto dinámico.

observo que Jon crea una instancia de MyDynamicObject dentro del mismo alcance que lo usa.

Asumo que se está generando una instancia de su objeto dentro del método GetEntity (), en cuyo caso ya no es InScope cuando se llega a utilizar, siendo clasificado como un objeto local.

Uso de "MyDynamicObject e = entidad;" forzará al compilador que utilice el constructor imlicitly MyDynamicObject y mapear el resultado a la misma. Por lo tanto frente a espacio ya está asignado y de alcance para ser utilizado cuando se pasa al constructor Ayudante.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top