今後の訪問者への注意: この質問は、欠陥のある再現コードに基づいていました。?.
オペレーターは確かに短絡します。このブラウザ タブを閉じることができます。
Web には、null 条件演算子 ( ?.
) が回路をショートさせると主張するソースが多数あります (例: http://www.informit.com/articles/article.aspx?p=2421572、「回路」を検索してください)。私はそのようなものを検出できません:
static void Main()
{
var c = new C();
Console.WriteLine(c?.Inner?.Inner); //does not rely on short circuiting, works
Console.WriteLine(c?.Inner.Inner); //throws NullReferenceException
}
class C
{
public C Inner;
}
ここで、最初の行は 2 番目のために?.
機能します。2 番目?.
は最初のオペランドとして null を認識したため、同様に null を返しました。これは短絡ではありません。
どうやら、null ケースがトリガーされた場合でも、チェーンの残りの部分が実行されます。チェーンは中止されません。私にとって、短絡とはチェーンが中止されたことを意味します。MSDN はこれが事実であると主張していますが、コード例は短絡を示していません。
//The last example demonstrates that the null-condition operators are short-circuiting
int? count = customers?[0]?.Orders?.Count();
// null if customers, the first customer, or Orders is null
この動作は、C# 6 の開発サイクル中に変更されましたか? それは、ウェブ上の悪い情報源を説明するでしょう. そして、ショートサーキットが存在しないのに、なぜショートサーキットについて多くの話があるのでしょうか? 私はここで何かを誤解しているかもしれません。
これは、オペレーターが短絡するかどうかに関するものであるため、重複していません(回答:いいえ、受け入れられた回答はそうは言っていません)。この候補は、null 可能なブール値に関するものであり、それ以外は無関係です。