web-dev-qa-db-ja.com

パラメータを省略する方法はありますか?

outパラメーターを持つ関数があると仮定しましょう。ただし、その値は必要ありません。与えられた結果がとにかく捨てられる場合、実際のパラメータを渡さない方法はありますか?

編集:

質問は オプションの出力パラメーター の重複であると投票されましたが、それはメソッド作成者の観点から見た場合のみです。メソッドのユーザーである場合は、パラメーターをオプションにするのではなく、変数を宣言せずにパラメーターを使用しないことに関心があります。これは不可能ですが、 C#7. を使用すると、メソッド呼び出しで宣言することができます。したがって、代わりに:

int unusedValue;
TryGetValue("key", out unusedValue);

あなたが得る:

TryGetValue("key", out int unusedValue);

あるいは:

TryGetValue("key", out _);

これは答えとして追加する必要がありますが、:

  • この質問は重複としてマークされているため、これを行うことはできません。
  • この質問は、実際には別のことを求めているように見えます。
35

これを行うことはできませんが、戻ってきた値を使用する必要があるという規則はありません。二度と使用しない一時変数を渡すだけです。

C#4.0ではオプションのパラメーターを使用できますが、outパラメーターをオプションにすることはできません。

EDIT:ところで、メソッドをオーバーロードすることもできます:

int DoStuff()
{
    int temp;
    return DoStuff(out temp);
}

int DoStuff(out outParam)
{
    //...
}
23
Justin Morgan

実際にoutパラメーターをオプションにすることはできませんが、outパラメーターなしで関数のオーバーロードを作成するだけで、一時変数を作成する必要がなくなります。

public void DoSomething(int param1, out int param2)
{
    /* Method work here */
}

public void DoSomething(int param1)
{
    int temp;
    DoSomething(param1, out temp);
}
7
Doctor Blue

C#についてはよくわかりませんが、VB.Netでは、定数を出力(byref)パラメーターに渡すだけです。したがって、出力パラメーターとして整数がある場合は、実際の変数を渡す必要はなく、0またはその他の有効な整数を渡すことができます。文字列を含むオブジェクトの場合、Nothing(C#ではNull)を渡すだけで、すべてが正常に機能します。変数がどこに格納されているかはわかりません。おそらく、渡した他のパラメータと同じようにスタック上にあり、関数が終了すると変数は消えます。

0
Kibbee