3

Visual Studio 2010 を使用して C# アプリケーションを開発する際に奇妙なことに気付きました。場合によっては、NullReferenceException がスローされるべきなのに、スローされないことがあります。代わりに、アプリケーションは通常どおり続行しますが、正常に閉じることができず、強制終了するようにスタックします。

例として、次のことを考慮してください。

public class MyControl : UserControl
{
    private SomeClass myObj;
    public MyControl()
    {
        Bar();
        myObj = new SomeClass();
    }

    public void Bar()
    {
        myObj.SomeProperty = 5; // myObj is null here but no exception gets thrown
    }
}

が実行されたときに例外がスローされる代わりにmyObj.SomeProperty = 5;、コードは関数からジャンプして、コンストラクターMyControlが親フォームによって呼び出された場所に戻ります。このようなものではなく、他のインスタンスでデバッガーによってキャッチされた NullReferenceExceptions (および他の例外) を取得できます。

ここで NullReferenceException をスローする必要がありますか、それとも C# や .NET について誤解しているのでしょうか?

4

2 に答える 2

3

理由

コールスタックのどこかで、try / catchブロックがこの例外をラップし、「適切に」処理しています。

処理された例外を確認する方法

例外がスローされているかどうかを本当に確認したい場合は、ユーザーが処理していないかどうかに関係なく、メニューの下の[例外]チェックボックスを有効にする必要があります。ThrownCommon Language Runtime ExceptionsDebug > Exceptions...

繰り返す

スローされた例外設定を有効にして、再試行すると、例外に関する通知が届きます。

その他の可能性

コードが古くなっている可能性があります。

于 2013-02-14T18:43:20.533 に答える
2

VSで、[デバッグ]->[例外]->[共通言語ランタイムの例外]に移動し、[スロー]をオンにして、再試行します。どこかで例外がキャッチされたかどうかが表示されます。

于 2013-02-14T18:43:04.350 に答える