41

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

編集:

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

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

あなたが得る:

TryGetValue("key", out int unusedValue);

あるいは:

TryGetValue("key", out _);

これは答えとして追加する必要がありますが、次のとおりです。

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

3 に答える 3

26

これはできませんが、返された値を使用する必要があるという規則はありません。二度と使用しない一時変数を単純に渡すことができます。

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

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

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

int DoStuff(out outParam)
{
    //...
}
于 2011-01-19T20:18:22.170 に答える
7

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

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

public void DoSomething(int param1)
{
    int temp;
    DoSomething(param1, out temp);
}
于 2011-01-19T20:23:07.287 に答える
0

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

于 2011-01-19T21:28:01.737 に答える