たとえば、次のコードがあるとします。
int? ReallyComplexFunction()
{
return 2; // Imagine this did something that took a while
}
void Something()
{
int i = ReallyCleverFunction() ?? 42;
}
...関数が一度だけ呼び出されることが保証されていますか? 私のテストでは一度しか呼び出されませんが、常にそうであると信頼できると述べているドキュメントは見当たりません。
編集
どのように実装されているかは推測できますが、まあ、私たちは開発者です。推測や憶測に惑わされるべきではありません。たとえば、将来の実装はすべて同じですか? 別のプラットフォームでの言語の実装は同じですか? それは、言語の仕様とそれが提供する保証に依存します。たとえば、将来または別のプラットフォームの実装 (良いものではありませんが、可能です) では、??
実装でこれを行う可能性があります。
return ReallyComplexFunction() == null ? 42 : ReallyComplexFunction();
ReallyComplexFunction
それが返されなかった場合、それは2回呼び出されnull
ます。(これはばかげた実装に見えますが、関数をnull可能な変数に置き換えると、かなり合理的に見えます: return a == null ? 42 : a
)
上記のように、テストでは一度しか呼び出されないことはわかっていますが、私の質問は、左側が一度だけ呼び出されることを C# 仕様が保証/指定しているのかということです。もしそうなら、どこですか??? の C# 言語仕様にそのような言及はありません。演算子(最初にクエリへの回答を探した場所)。