Domanda

Chiamare un costruttore interna con un argomento dinamica in C # risultati 4.0b nel seguente eccezione

  

System.ArgumentNullException: Valore   non può essere nullo. Nome del parametro:   costruttore

Esempio di codice (grazie a Jon Skeet)

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

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

Sembra che il tempo di esecuzione non considera costruttori interne quando si sta cercando di scegliere quella giusta. Questo sembra essere un bug, così ho postato su Connect: http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback. aspx? FeedbackID = 472.924

Sembra stato risolto per la nuova versione.

È stato utile?

Soluzione

EDIT: Okay, ora ho rintracciato giù molto più lontano - che sta utilizzando un costruttore interna che causa un problema

.

Ecco un davvero esempio breve ma completo che illustra il problema:

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

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

Suggerisco si accede questo con Collegare - quindi inserire l'URL qui e possiamo votare su di esso :)

(La mia ipotesi è che all'interno del DLR c'è una chiamata a GetConstructor senza il BindingFlags.NonPublic del caso, ma questa è solo una supposizione ...)

Altri suggerimenti

Senza vedere il codice vorrei suggerire che si sta passando una classe non istanziato al costruttore. Assicurare che siano nel campo di applicazione e sono stati un'istanza esempio mediante l'uso di nuovo, prima che siano passati al vostro oggetto non dinamico.

Modifica

Nel vedere il codice vorrei suggerire che si utilizza DynamicObject piuttosto che dinamico per il vostro aiuto e la proprietà costructor entità.

Modifica dopo aver visto la risposta di Jon

Penso che il problema è in utilizzando il metodo GetEntity () per generare l'istanza oggetto dinamico.

rilevo che Jon crea un'istanza MyDynamicObject all'interno della stessa portata di lui lo usa.

Presumo che si sta generando un'istanza del vostro oggetto all'interno del metodo GetEntity (), nel qual caso non è inscope più quando si arriva a usarlo, essendo classificato come un oggetto locale.

Uso di "MyDynamicObject e = entità;" costringerà il compilatore utilizzare inserito implicitamente il costruttore MyDynamicObject e mappare il risultato ad esso. Quindi Indirizzo spazio è già allocato e portata da utilizzare quando si passa al costruttore Helper.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top