C#4では、オプションの出力パラメータを使用する良い方法はありますか?それは、「オプション」ようにするにオプションの出力パラメータ
答えて
号
、あなたはメソッドに値を割り当てる必要はありません意味で、あなたはref
を使用することができます。
'ref'パラメータは非常に異なるユースケースです。呼び出し元がrefパラメータを指定していない場合は、オプションのパラメータが特定の値に渡されます。呼び出し元は、指定したかどうかにかかわらず常に値を指定しています。 'ref'は常に有効なメモリ位置を指し、有効なメモリ位置は常に_something_を含みます。せいぜい、これは単にデフォルト値が "X"であるというデフォルトの仕様の利点を持たない魔法の価値です。 – danwyand
さて、この答えは設計上の判断ではないので、私は "その意味で"修飾子を付け加えました。 – codekaizen
private object[] Func();
戻り値のオブジェクト配列に必要な出力を多く割り当ててから使用してください。あなたは
private void Func(out int optional1, out string optional2)
のようなオプションの出力何かを意味して、あなたが
Func(out i);
のようなものを呼び出す場合 はなく、その後、答えはあなたがカントノーです。 また、C#と.NETフレームワークでは、List
とArray
のような非常に柔軟性のある多くのデータ構造があり、出力パラメータまたは戻り値の型として使用できるため、オプションの出力パラメータを持つ方法を実装する必要はありません。
OptionalAttributeでパラメータを装飾することもできません。前のサンプルを拡張するには、次のようなものがあります。
private void Func(
[Optional] out int optional1,
[Optional] out string optional2)
{ /* ... */ }
上記はコンパイルされます(おそらく残念ながら)。しかし、コンパイルしようとすると、1パラメータの署名を持つオーバーロードが明示的に提供されない限り、コンパイルしようとすると失敗します。
上記の作業を(理論的に)行うことは重大な問題です。省略されたオプションのパラメータを持つメソッドが呼び出されると、すべてのパラメータの値を含むスタックフレームが作成され、欠損値は指定されたデフォルト値で単純に埋められます。
ただし、「out」パラメータは値ではなく参照値です。そのパラメータがオプションで、指定されていない場合は、どの変数を参照しますか?コンパイラーは、呼び出し元によってオプションパラメータが指定されていれば、先験的なことをコンパイラーが知らないため、コンパイラーはメソッドからの通常の戻り値の前に "out"パラメーターを入れる必要があります。これは、ダミー変数の参照がどこかでのように渡されなければならないことを意味するので、メソッドには何かがあります。このダミーの変数空間を管理することは、コンパイラの作者に厄介な頭痛を引き起こします。これがどのように機能するかの詳細を理解することは不可能だと言っているわけではありませんが、アーキテクチャ上の影響はMicrosoftがこの機能を理解して渡したほど十分です。
public class Dummy<T>
{
public T Value;
}
そしてint
は任意のタイプであってもよいfunctionDoSomething(out new Dummy<int>().Value
を、使用。
- 1. PHP Documentor - 出力オプション
- 2. phpDocumentor出力パラメータ
- 3. sqlhelper出力パラメータ
- 4. 出力パラメータが
- 5. simplejdbccallの出力パラメータ
- 6. ストアドプロシージャの出力パラメータ
- 7. g ++ -Eオプションの出力
- 8. 重複パラメータ出力
- 9. 出力パラメータをラベル
- 10. pytestフィクスチャのパラメータ出力
- 11. ADO.Netとストアドプロシージャの出力パラメータ
- 12. PHP SQL Serverの出力パラメータ
- 13. PetaPocoとストアドプロシージャの出力パラメータ?
- 14. 出力パラメータのgooglemock matcher
- 15. 入力パラメータと出力パラメータの両方を含むストアドプロシージャ
- 16. オプションのURLパラメータ
- 17. Linqオプションのパラメータ
- 18. オプションのパラメータ
- 19. MVC3オプションのパラメータ
- 20. オプションのRewriteRuleパラメータ
- 21. 出力パラメータSQL Server 2005
- 22. PSBoundパラメータを出力する
- 23. Scipy Leastsqオプションの出力変数(メッシュ)
- 24. 標準出力、標準入出力オプション[ヌルヌル、ヌル、]「継承」
- 25. Sqliteのオプションのパラメータ
- 26. Compojure:オプションのURLパラメータ
- 27. メソッドオーバーライドとオプションのパラメータ
- 28. フラッシュmsgオプションのパラメータ
- 29. オプションGETパラメータ
- 30. ストアドプロシージャからの出力パラメータの取得
このような機能の値は表示されません。 PDCでC#コンパイラの人のセッションを聞いたことがあるならば、すべての変更が意味を持つことがわかります。 –
私は、この機能には価値がないという意見に同意します。メソッドがいくつかのロジックを持っている場合、BESIDEはout-parametersを介してデータを返す - 私はこのロジックを呼び出すことができますが、出力は必要ありません。 – Alex
私はInt32.TryParse()を使用して、指定された文字列を解析して数値に変換できるかどうかを確認します。だからJitbitは正しい。 –