問題タブ [out-parameters]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 匿名メソッド ブロックで out パラメータの使用を回避するにはどうすればよいですか?
次のメソッドはコンパイルされません。Visual Studio は、「out パラメーターは匿名メソッド内で使用できない可能性があります」と警告します。このWithReaderLock(Proc action)
メソッドはdelegate void Proc()
.
この動作を取得する最良の方法は何ですか? (スレッドセーフな辞書に関するアドバイスは控えてください。この質問は、一般的な out パラメータの問題を解決することを目的としています)。
c# - C# Out パラメータの質問: Out は値の型をどのように処理しますか?
更新だから完全にツールの瞬間を引っ張った。Out/Ref に対する参照という意味です。「ref」と書かれているものはすべて、私が実際に参照することを意味していました
SomeMethod(オブジェクト someObject)
対
SomeMethod(out someObject)
ごめん。コードを変更したくないだけなので、答えはすでに意味があります。
私が理解している限り、ポインターを「コピー」し、そのポインターを使用するためにスタック上に新しいスペースを作成する ref とは異なりますが、ポインターは変更しません。
Out はポインターをコピーし、ポインターが指す場所を操作できます。
オブジェクトに関してはそれで問題ありませんが、スタック上にあるだけであることを示すものがないため、値型についてはどうでしょうか?
com - COM 機能が失敗した場合でも out params を設定する必要がありますか?
インターフェイスを実装するときCOM
、成功時には常に out パラメータに割り当てますが、エラー時にも割り当てる必要がありますか?
かつて、out パラメーターを初期化せず、変数を初期化した場合、メソッド内で変更しなければその値のままであると仮定して、鼻を噛まれました。ただし.NET
、マーシャラーはこれが[out]
パラメーターであることを認識しているため、呼び出しサイトに配置した初期値を破棄し、関数が返された後にガベージに入れました (それをデバッグするのは楽しかったです)。
障害過補償でもパラメーターに割り当ててout
いますか、それとも本当に行うべきですか?
編集:関数が失敗した場合、正式にはパラメータにアクセスするべきではありませんが、私はしばしば次のようなコードを目にします(そして時々書く)( sharptoothの投稿の例を使用):
これは、マーシャリングされていないコード (同じスレッド アパートメント) では正常に機能しますが、マーシャラーが関与している場合、関数が成功した場合にのみ戻り値を設定するのに十分スマートですか?
com - COM の [out] パラメータを使用できることを確認するにはどうすればよいですか?
正式には、関数が成功しない限り、COM 関数からのパラメーターを使用しないでください。これは、パラメーターが使用できる[out]
かどうかを確認する方法が (少なくとも) 3 つあることを意味します。[out]
次のインターフェースを検討してください
次のうち、どの方法を使用することをお勧めしますか?
1.戻り値の確認
のバグがポインター IFoo
の逆参照を引き起こす可能性があるため、これは私を少し緊張させます。NULL
2.出力パラメータを確認する
これは、メソッドが失敗した場合にパラメーターを変更してはならないという事実に依存し[out]
ます (パラメーターが変更された場合 <==> 使用しても安全です)。
とにかく、この種のことが起こることに注意してくださいCComPtr
. のデストラクタはRelease
、ポインタがNULL
そうでない場合に呼び出されるので、ガベージになることはありません.
3. 偏執的な方法、両方にチェックを入れる
私の意見では、これは少し冗長です。
PS関連の質問を参照してください。
stored-procedures - SubSonic: ストアド プロシージャの OUT パラメータの値を取得する
私はあなたのツールが大好きです。ずいぶんと使っていたのですが、今日、トラブルに見舞われました…
OUT パラメータを介していくつかの値を返すストアド プロシージャを作成しましたが、SubSonic はストアド プロシージャ メソッドの出力パラメータを生成していないようです。たとえば、次のような SPI の場合:
CREATE PROC dbo.MyProc @param1 int、@param2 int out、@param3 varchar(150) out
署名を生成します
SPs.MyProc(int? param1, int? param2, string param3
私はそれがこれを生成することを期待します
SPs.MyProc(int? param1, out int? param2, out string param3)まあ、メソッドが実際には SP を構成するだけで実際には実行しないことを考えると、Subsonic がこれを生成することを期待します
SPs.MyProc(int? param1, ref int? param2, ref string param3)
皆さんはこの問題をどのように解決しますか?サブソニックにはすでにそのようなものがありますが、私はそれを見逃しましたか?
c# - 「ref」と「out」がポリモーフィズムをサポートしないのはなぜですか?
次のようにします。
上記のコンパイル時エラーが発生するのはなぜですか? ref
これは、引数と引数の両方で発生しout
ます。
c# - DynamicMethod と out-parameters?
このように -パラメータを持つデリゲートの DynamicMethod を定義するにはどうすればよいout
ですか?
メソッドを呼び出すときにa
引数をに設定するメソッドが必要だとしましょう。null
これを処理するためのおそらくより良い方法は、メソッドがAction
デリゲートを返すようにすることですが、これは大規模なプロジェクトの単純化された部分にすぎず、問題のメソッドは既に値を返しているため、out
パラメーターを処理する必要があることに注意してください。それに加えて、したがって質問です。
私はこれを試しました:
しかし、私はこれを取得します:
ライン上del(out a);
。
スタックに null をロードし、それを引数に格納しようとする 2 行をコメント アウトすると、メソッドは例外なく実行されることに注意してください。
編集:これは最善のアプローチですか?
c# - C#でプロパティを「out」パラメータとして渡す
私が持っているとしましょう:
Valueメンバーを次のようなoutパラメーターとして渡したい
しかし、 「'out'引数は変数として分類されていません」というコンパイルエラーが発生します。 これを達成する方法はありますか、それとも変数を抽出する必要がありますか?
c# - コード分析は、「out」パラメーターを使用しないことについての提案とともに戻ってきます
作成したオブジェクトに対してVS2008コード分析ツールを実行し、次の提案を受け取りました...
警告147CA1021:Microsoft.Design:'returnValue'がoutパラメーターである必要のない設計を検討してください。
私は「アウト」パラメータがかなり有用であることに気づき、それらが設計の実践で眉をひそめていると見なされていることに気づいていませんでした。私がこの警告を受け取った理由について誰かが光を当てることができるかどうか知りたいと思いましたか?それが悪い習慣なら?なぜ?そして、何が良い習慣でしょうか?
アドバイスをいただければ幸いです。
c# - C#でパラメータを無効にしますか?
Stackoverflow を読んだ後、DateTime の形式をチェックする場合は DateTime.TryParse を使用する必要があります。いくつかの正規表現を試してみると、多くのフォーマットをカバーするために長くて厄介なように見えます。
しかし、TryParse には "out" パラメーターが必要であり、検証形式のチェックを行いたいだけなので、実際の結果は必要ありません。
したがって、「出力」結果を保持する変数が残っており、それに対して何もする必要はありません。out パラメータを実行する必要がないようにする方法はありますか?
そのため、この警告を取り除き、変数が飛び回るのをやめました。