Domanda

Ho familiarità con l'utilizzo di out per passare un semplice tipo di dati per la manipolazione, ma non riesco a capire come passare in questo Queue<> senza causare un errore di compilazione. Qualche idea?

Codice:

Queue<SqlCommand> insertScriptQueue = new Queue<SqlCommand>();

private void UpdateDefaultIndicator(int newDefaultViewID,
                                    out (Queue<SqlCommand>) insertScriptQueue)

UpdateDefaultIndicator(newViewID, out (Queue<SqlCommand>)insertScriptQueue);
È stato utile?

Soluzione

La coda verrà comunque passata per riferimento, non è un tipo di valore. Basta non usare "out". AGGIORNAMENTO: Scusami, stavo pensando a "ref", ma il fatto che stai passando un tipo di dati Queue e non solo un riferimento non allocato, mi fa pensare che vuoi usare comunque "ref". Tranne ovviamente che non è necessario utilizzare 'ref' perché la coda non è un tipo di valore; verrà già passato "per riferimento", per impostazione predefinita.

Altri suggerimenti

Stai passando un tipo di riferimento. Non c'è bisogno di usarlo.

Non dovresti inizializzare una variabile out. Se è necessario modificare una variabile nell'ambito, utilizzare invece ref.

Come sottolinea Ed nel suo commento, " modifica " potrebbe non darti l'idea completa di ciò che sta accadendo qui: un parametro out di un tipo di riferimento sarà per definizione un oggetto inizializzato alla fine della chiamata di funzione. Come la maggior parte delle altre risposte ha sottolineato, se si desidera passare un oggetto inizializzato, ref è la scelta più forte.

Queue<SqlCommand> insertScriptQueue;

private void UpdateDefaultIndicator(int newDefaultViewID,
                                out Queue<SqlCommand> insertScriptQueue){/*body*/}

UpdateDefaultIndicator(newViewID,out insertScriptQueue);

Per me funziona benissimo ... Che errore stai riscontrando?

Perché vuoi un preventivo &; out & preventivo; ... qui ... perché non restituisci il tipo invece? Lascia che il metodo restituisca Queue & Lt; & Gt; invece di nulla ... funzionerà per te?

assicurati di assegnare insertScriptQueue un qualche tipo di valore all'interno del metodo UpdateDefaultIndicator

La risposta alla domanda originale, tra l'altro, è che stai lanciando in coda e il cast sta restituendo un riferimento temporaneo. Tale riferimento non è assegnabile e quindi non è un parametro legale. Il codice di Erich implementa la correzione per questo problema.

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