2016-07-19 12 views
1

コードを書くときに、必要に応じて成功したbool値とコードのoutパラメーターを返すと便利な場合があります。または、TryParse関数とそれぞれの出力パラメータを使用することもできます。メソッド呼び出しのoutパラメーターをインライン化する

本の最近の例では、次のメソッドシグネチャた:ここ​​

private State GetTheStateOfClass1(Class1 o, out double confidence) 

私はClass1オブジェクトの状態とオブジェクトがその状態を持っていること、それに対応する自信を見つける方法があります。

そうのようなClass2の新しいインスタンスを作成する場合は、この方法が使用されている:私の理解に

Class2 c2 = new Class2(GetTheStateOfClass1(o, out double confidence), confidence, ...); 
+1

私は 'Tuple 'または 'StateWithConfidence'を提案します。 'out'パラメータはすでにmehですが、あなたがそれらを両方とも設定され使用されている式に含めると、それは二倍です。 'new Class2(o.GetStateWithConfidence())'(これは必要に応じて拡張メソッドとすることができます)、あるいは単に 'new Class2(o)'を呼び出すだけです。もちろん、主観的です。 –

+0

C#7では、これが可能になるはずです(あなたが提案する構文とまったく同じです)(https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0 /)。最終的な例が最終的に(宣言と同じステートメント内のインラインパラメータを使用して)コンパイルされるかどうかはまだ未解決の問題です。 –

+0

@JeroenMostertああ、それはまだ確認されていますか?それが確認されれば答えとして投稿できますか? – TheLethalCoder

答えて

1

double confidence; 
Class2 c2 = new Class2(GetTheStateOfClass1(o, out confidence), confidence, ...); 

は、私はそうのようなアウトインライン化パラメータを使用することができる方法はあります、 不可能だよ; outパラメータは、呼び出し元のスコープ内の実際の変数である必要があります。つまり、回避策は、次のようにoutパラメータを使用しないオーバーロードを作成することです。

private State GetTheStateOfClass1(Class1 o) 
{ 
    double confidence; 
    return GetTheStateOfClass1(Class1 o, out confidence); 
} 
関連する問題