out
パラメーターを持つ関数があると仮定しましょう。ただし、その値は必要ありません。与えられた結果がとにかく捨てられる場合、実際のパラメータを渡さない方法はありますか?
編集:
質問は オプションの出力パラメーター の重複であると投票されましたが、それはメソッド作成者の観点から見た場合のみです。メソッドのユーザーである場合は、パラメーターをオプションにするのではなく、変数を宣言せずにパラメーターを使用しないことに関心があります。これは不可能ですが、 C#7. を使用すると、メソッド呼び出しで宣言することができます。したがって、代わりに:
int unusedValue;
TryGetValue("key", out unusedValue);
あなたが得る:
TryGetValue("key", out int unusedValue);
あるいは:
TryGetValue("key", out _);
これは答えとして追加する必要がありますが、:
これを行うことはできませんが、戻ってきた値を使用する必要があるという規則はありません。二度と使用しない一時変数を渡すだけです。
C#4.0ではオプションのパラメーターを使用できますが、out
パラメーターをオプションにすることはできません。
EDIT:ところで、メソッドをオーバーロードすることもできます:
int DoStuff()
{
int temp;
return DoStuff(out temp);
}
int DoStuff(out outParam)
{
//...
}
実際にoutパラメーターをオプションにすることはできませんが、outパラメーターなしで関数のオーバーロードを作成するだけで、一時変数を作成する必要がなくなります。
public void DoSomething(int param1, out int param2)
{
/* Method work here */
}
public void DoSomething(int param1)
{
int temp;
DoSomething(param1, out temp);
}
C#についてはよくわかりませんが、VB.Netでは、定数を出力(byref)パラメーターに渡すだけです。したがって、出力パラメーターとして整数がある場合は、実際の変数を渡す必要はなく、0またはその他の有効な整数を渡すことができます。文字列を含むオブジェクトの場合、Nothing(C#ではNull)を渡すだけで、すべてが正常に機能します。変数がどこに格納されているかはわかりません。おそらく、渡した他のパラメータと同じようにスタック上にあり、関数が終了すると変数は消えます。