2011-01-19 6 views
27

outというパラメータを持つ関数があるとしますが、その値は必要ありません。実際にパラメータを渡す方法はありますか?パラメータを省略する方法はありますか?

EDIT:

質問はOptional Output Parameters のだまされやすい人であることを選ばれていますが、あなたがメソッドの作成者の視点から見れば、それが唯一です。メソッドのユーザーであれば、変数を宣言することなくパラメータを使用せずに、パラメータをオプションにすることに興味はありません。これは不可能ですが、C# 7.0ではメソッド呼び出しで宣言することができます。だから、代わりに:

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

あなたが得る:

TryGetValue("key", out int unusedValue); 

かさえ:

TryGetValue("key", out _); 

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

  • 私ができます」それは偽装としてマークされているので、この質問にはこれをしないでください。
  • この質問は実際には別のものを求めているようです。
+5

いいえいいえいいえいいえいいえ – Andrey

答えて

22

これはできませんが、返される値を使用する必要はないというルールはありません。再度使用しない一時変数を渡すことができます。

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

EDIT:はところで、あなたはまた、メソッドをオーバーロードすることができます

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

int DoStuff(out outParam) 
{ 
    //... 
} 
+0

まあ、私はそれを使用する必要はありません知っています。私はまた、変数を渡さないようにしたいと思います。しかし、これは答えです、ありがとう。 –

7

あなたが実際に出て、パラメータをオプションにすることはできませんが、あなたは単純にパラメータを指定せずに関数のオーバーロードを作成することができ、一時変数を作成する必要がなくなります。

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

public void DoSomething(int param1) 
{ 
    int temp; 
    DoSomething(param1, out temp); 
} 
+0

この回答はより機能的です。後でそれを使用したい場合や使用しない場合は、後で変更する必要はありません。 – elcool

+0

あなたが呼び出しているメソッドを所有していない場合は、あなたのためにoutパラメータをダミーにする拡張メソッドを作成することができます。 –

0

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

+0

私はそれを試してみましたが、残念ながらそれは動作しませんでした。 'エラーCS1510:refまたはout引数は代入可能変数でなければなりません。 ' – MasterMastic

関連する問題