0

今後の訪問者への注意: この質問は、欠陥のある再現コードに基づいていました。?.オペレーターは確かに短絡します。このブラウザ タブを閉じることができます。


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 可能なブール値に関するものであり、それ以外は無関係です。

4

3 に答える 3

2

ここでの短絡は、たとえばobj?.Property1?.Property2?.Property3and objisnullの場合、式全体が null を返し、他のプロパティは呼び出されないことを意味します (スローされるため)。

その短絡は?.、どの部分が であるかに応じて、それぞれで発生する可能性がありnullます。objがnullではなく、最初がnullの場合Property、他の2つだけが呼び出されません。2番目以降も同じです。

短絡しているのはであり、その式の後の残りのステートメントではありません。

于 2016-06-24T16:32:45.433 に答える