Question

Je suis habitué à utiliser out pour transmettre un type de données simple à des fins de manipulation, mais je n'arrive pas à comprendre comment passer ce Queue<> sans provoquer d'erreur de compilation. Des idées?

Code:

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

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

UpdateDefaultIndicator(newViewID, out (Queue<SqlCommand>)insertScriptQueue);
Était-ce utile?

La solution

La file d'attente va quand même être passée par référence, ce n'est pas un type de valeur. Juste n'utilisez pas "out". UPDATE: Pardon, je pensais à 'ref' - mais le fait que vous transmettiez un type de données Queue, et pas seulement une référence non allouée, me fait penser que vous voulez utiliser 'ref' de toute façon. Sauf que bien sûr, vous n'avez pas besoin d'utiliser 'ref' car la file d'attente n'est pas un type de valeur; sa va déjà être passé 'par référence', par défaut.

Autres conseils

Vous passez dans un type de référence. Pas besoin d'utiliser dehors.

Vous ne devriez pas initialiser une variable out. Si vous devez modifier une variable incluse dans la portée, utilisez plutôt ref.

Comme Ed le souligne dans son commentaire, & "modifier &"; peut ne pas vous donner une idée complète de ce qui se passe ici - un paramètre de sortie d’un type de référence sera par définition un objet initialisé à la fin de l’appel de la fonction. Comme la plupart des autres réponses l'ont fait remarquer, si vous souhaitez transmettre un objet initialisé, le choix le plus contraignant est ref..

Queue<SqlCommand> insertScriptQueue;

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

UpdateDefaultIndicator(newViewID,out insertScriptQueue);

Cela fonctionne bien pour moi ... Quelle erreur obtenez-vous?

Pourquoi voulez-vous une citation &; une citation &; ... ici ... pourquoi ne retournez-vous pas le type à la place? Let méthode return Queue & Lt; & Gt; au lieu de vide .. cela fonctionnera pour vous?

assurez-vous que vous attribuez à insertScriptQueue une sorte de valeur dans la méthode UpdateDefaultIndicator

En passant, la réponse à la question initiale est que vous effectuez un casting vers Queue et que le casting retourne une référence provisoire. Cette référence n'est pas assignable et n'est donc pas un paramètre légal. Le code d'Erich implémente le correctif pour ce problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top