out関数パラメーターのトリッキーなC#構文
質問
私はoutを使用して操作のために単純なデータ型を渡すことに慣れていますが、コンパイルエラーを発生させずにこのQueue<>
を渡す方法を理解できないようです。アイデアはありますか?
コード:
Queue<SqlCommand> insertScriptQueue = new Queue<SqlCommand>();
private void UpdateDefaultIndicator(int newDefaultViewID,
out (Queue<SqlCommand>) insertScriptQueue)
UpdateDefaultIndicator(newViewID, out (Queue<SqlCommand>)insertScriptQueue);
解決
キューはとにかく参照によって渡されますが、値型ではありません。 「out」を使用しないでください。更新:申し訳ありませんが、私は「ref」を考えていました-しかし、割り当てられていない参照だけでなく、Queueデータ型を渡しているという事実から、とにかく「ref」を使用したいと思うようになります。もちろん、キューは値型ではないため、「ref」を使用する必要はありません。デフォルトで「参照」で既に渡されます。
他のヒント
参照型を渡します。使い切る必要はありません。
out変数を初期化するべきではありません。スコープ内の変数を変更する必要がある場合は、代わりにrefを使用してください。
エドがコメントで指摘しているように、<!> quot; modify <!> quot;ここで何が起こっているかを完全に理解できないかもしれません-参照型のoutパラメーターは、関数呼び出しの終了時に定義により初期化されたオブジェクトになります。他のほとんどの答えが指摘しているように、初期化されたオブジェクトを渡したい場合は、refがより強力な選択です。
Queue<SqlCommand> insertScriptQueue;
private void UpdateDefaultIndicator(int newDefaultViewID,
out Queue<SqlCommand> insertScriptQueue){/*body*/}
UpdateDefaultIndicator(newViewID,out insertScriptQueue);
それは私には問題ありません...どのエラーが発生していますか?
なぜ<!> quote; out <!> quoteが必要なのですか。 ...ここで...なぜ代わりに型を返さないのですか?メソッドがQueue <!> lt; <!> gt;を返すようにします無効の代わりに..それはあなたのために働きますか?
UpdateDefaultIndicatorメソッド内でinsertScriptQueueに何らかの値を割り当てていることを確認してください
元の質問に対する答えは、ところで、あなたはキューにキャストしているので、キャストは暫定参照を返しています。その参照は割り当て可能ではないため、正当な出力パラメーターではありません。エーリッヒのコードは、この問題に対する修正を実装しています。