2

私の主張は明らかだと思いますが、どのような条件下でも、これはnull参照例外をスローする可能性がありますか?Countつまり、そのプロパティにアクセスしようとしているときにe.Resultがnullであることに異議を唱えます。

if (e.Result == null || e.Result.Count == 0)
    return;

編集:(後から来る質問者のために)この質問を最大限に活用するために、その例外が発生するのをどのように防ぐことができlockますか?ステートメントを使用できますか?どうやって?

4

7 に答える 7

8

そのコードは、メソッドがスレッドセーフでない場合にのみNullReferenceExceptionをスローできます。つまり、別のスレッドが、チェックの直後とチェックの直前にe.Result偶然にnullを割り当てることを決定した場合。e.Result == nulle.Result.Count == 0

于 2011-02-26T14:46:40.597 に答える
3

eがnullの場合にのみそうします。

于 2011-02-26T14:46:41.347 に答える
1
e == null

また

マルチスレッドと競合状態?

于 2011-02-26T14:47:50.020 に答える
1

いいえ。-e.Result==nullが最初に評価され、trueの場合、returnがすぐに呼び出され、2番目のケースは評価されません。糸脱毛が異なる場合があります

于 2011-02-26T14:48:09.380 に答える
1

Result背後に独自のコードがあり、そのコードがそのエラーで失敗している場合は、「Null-ReferenceException」がスローされる可能性があります。

于 2011-02-26T14:50:33.977 に答える
0
            EventArgs args = e;
            if (args.Result == null || args.Result.Count == 0)
            {
                return;
            }

最初にイベント引数(e)を独自のローカル要素にコピーし、これをif条件付きチェックに使用するという考え方です。コピーが結果もコピーするのに十分な深さであることを確認するように注意してください(そうしないと、別のスレッドがifチェックの途中で結果をnullにしたときに、マルチスレッドのケースに遭遇することになります)。ローカルコピーは常にスレッドセーフです。

于 2011-02-26T15:21:48.993 に答える
0

他の人がすでに指摘しているマルチスレッド/競合状態の問題は別として、あなたが探しているかもしれないトピックは短絡評価です。C#では、||演算子は短絡を使用するため(|熱心な、とは対照的に)、e.Result == nulltrueと評価された場合、は評価されe.Result.Count == 0ません。

他の人はすでに答えていますが、私はあなたにこのタイプの行動の名前といくつかのさらなる読み物を与えたいと思いました。

于 2011-02-26T16:52:03.590 に答える