Frage

Ich bin vertraut mit der Manipulation in einem einfachen Datentyp übergeben mit, aber ich kann nicht scheinen, um herauszufinden, wie man in diesem Queue<> passieren, ohne einen Compiler-Fehler verursacht. Irgendwelche Ideen?

Code:

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

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

UpdateDefaultIndicator(newViewID, out (Queue<SqlCommand>)insertScriptQueue);
War es hilfreich?

Lösung

Die Warteschlange wird ohnehin als Referenz übergeben werden, es ist nicht Wert-Typ. Nur verwenden Sie nicht ‚out‘. UPDATE: Entschuldigen Sie, ich ‚ref‘ dachte - aber die Tatsache, dass Sie eine Queue Daten eingeben vorbei sind, und nicht nur einen nicht zugeordneten Referenz, lässt mich denken, dass Sie ‚ref‘ zu verwenden sowieso. Außer natürlich, die Sie brauchen nicht zu verwenden ‚ref‘, weil die Warteschlange nicht ein Werttyp ist; seine schon los 'by reference', die standardmäßig in weitergegeben werden.

Andere Tipps

Sie vorbei in einem Referenztyp. Keine Notwendigkeit zu verwenden, aus.

Sie sollten keine out Variable werden initialisiert. Wenn Sie ein in-scope Variable ändern müssen, verwenden ref statt.

Wie Ed in seinem Kommentar weist darauf hin, „ändern“ können Sie nicht die volle Vorstellung davon, was hier geschieht - ein Out-Parameter eines Referenztyps per definitionem ein initialisiert Objekt am Ende des Funktionsaufrufs sein. Wie die meisten anderen Antworten haben darauf hingewiesen, wenn Sie in einem initialisierten Objekt zu übergeben wollen, ref ist die stärkere Wahl.

Queue<SqlCommand> insertScriptQueue;

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

UpdateDefaultIndicator(newViewID,out insertScriptQueue);

Das ist für mich gut funktioniert ... Was Fehler erhalten Sie?

Warum wollen Sie ein „out“ ... hier ... warum nicht Sie den Typ zurückgeben statt? Lassen Methode zurückgeben Queue <> statt void..will die für Sie arbeiten?

stellen Sie sicher, dass Sie insertScriptQueue eine Art von Wert innerhalb der UpdateDefaultIndicator Methode

zuweisen

Die Antwort auf die ursprüngliche Frage, übrigens ist, dass Sie Warteschlange sind Gießen, und die Besetzung ein Zwischenzeugnis zurückkehrt. Dieses Ersuchen ist nicht übertragbar, und so ist keine juristischen out-Parameter. Erichs Code implementiert die Lösung für dieses Problem.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top