いくつかのオーバーライドがあるメソッドがあります。より拡張されたオーバーライドの1つで、OUTパラメーターを返したいのですが、単純なオーバーライドでは返しません。例えば:
public bool IsPossible(string param1, int param2)
public bool IsPossible(string param1, int param2, out bool param3)
私が現在これを達成している方法は、次のようなものです。
public bool IsPossible(string param1, int param2) {
bool temp;
return IsPossible(param1, param2, out temp);
}
これを達成するためのより良い方法はありますか? null可能なoutパラメーターを使用できますか(または使用する必要がありますか)?
それは私にはうまく見えます。技術的な理由から、out
をオプションにすることはできません(有効なインスタンスを指す必要があります)。
OP:
Null可能なoutパラメーターを使用できますか(または使用する必要がありますか)?
Null許容のoutパラメータは、あまり役に立ちません。この:
_public bool IsPossible( string param1, int param2, out bool? param3 )
{
...
}
_
_param3
_をオプションにしません。 _param3
_ isのセマンティクスを変更します。 _bool?
_(別名_Nullable<bool>
_)は、_param3
_のドメインを2つの値(true
およびfalse
)から3に広げ、3番目の値(null
)、通常は欠落/不明として解釈されます。呼び出し元は、3つすべての引数を指定する必要があります。
参照パラメーターを破棄するオーバーロード(「ドントケア」シナリオ)を提供することによってIsPossible()
をオーバーロードすることは、適切な解決策です。
A 'ref' or 'out' parameter cannot have a default value.
あなたがそれをした方法はちょうどいいです。申し訳ありませんが、特効薬はありません。
個人的には「そのまま」でいいと思います。ただし、別のアプローチは、複合戻り値(おそらく、2つのプロパティを持つ不変の構造体)を返すことです。これは、一部の人々がout
を回避するという事実を回避します。私はそれらの人々の一人ではありません:p
質問について。実際、out/refをオプションにすることはできません。
不必要に凝ったものにしたい場合は、conposite return-typeにboolへの変換を与えて、暗黙のif
テストを許可することができます。
C#7.0以降、破棄(_
)メソッドに:
return IsPossible(param1, param2, _);
はい、Nullable変数は素晴らしいです。次に、このようなことを行います。
public bool? IsPossible(string param1, int param2);
var ans = IsPossible("Parm1", 1);
if (ans.HasValue)
{
//working.
}