6

私は次のように私の方法の1つの最初に非常に簡単なチェックをしています:

public void MyMethod(MyClass thing)
{
    if(thing == null)
        throw new ArgumentNullException("thing");

    //Do other stufff....
}

しかし、「if(thing == null)」行がNullReferenceExceptionをスローしていることを示すように見えるスタックトレース(本番環境のElmahから)を取得しています。スタックトレースの最初の2行は、次のようになります。

System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at MyLibrary.BL.AnotherClass.MyMethod(MyClass thing) in C:\Development\MyProject\trunk\MyLibrary.BL\AnotherClass.cs:line 100

MyClassは、演算子のオーバーロードなどがない非常に単純なクラスであるため、NullReferenceExceptionをスローしているものについて少し困惑しています。

誰かがこれを引き起こす可能性のあるシナリオを提案できますか?

編集:「もの」がnullである可能性があると思いますが、実際にはNullReferenceExceptionではなくArgumentNullExceptionを期待します-これは基本的にこの質問の内容です。例外を変更または誤って報告しているフレームワークまたはElmahが何かあるのでしょうか?それとも、バイナリが何らかの理由で古くなっているという唯一の説明ですか?

4

5 に答える 5

4

if (thing == null)を投げることは不可能ですNullReferenceException

これは、何か他のことが起こっていることを意味します。if問題を引き起こした可能性を無視するという確固たる決意とともに、想像力を使い始める時が来ました。

于 2012-10-16T01:01:12.617 に答える
2

if ステートメントは、NullReferenceExceptionif MyClass が==演算子を正しく定義していない場合などをスローする可能性があります。

class MyClass
{
   int A {get;set;}

   public static bool operator ==(MyClass a, MyClass b)
   {
      return a.A == b.A;
   }

   public static bool operator !=(MyClass a, MyClass b)
   {
      return !(a == b);
   } 
}
于 2012-10-16T01:19:44.873 に答える
1

MyMethod を呼び出すチェーンから例外が発生しているようです。MyMethod() は例外をスローしていますが、上記の何も処理していないため、どの Web フレームワークでも HttpUnhandledException をスローしています。

于 2012-10-16T00:57:34.050 に答える
0

私もこのありえない状況に遭遇しました。asキーワードの使用が原因であることが判明しました。理由はわかりません。SharpPdf ライブラリを使用していて、次のようなコード行がありました。

var destElement = annotDict.Elements["/Dest"] as PdfName;
if (destElement == null)
{
    continue;
}

その部分を削除するとas PdfName、機能します。したがって、コードには 2 つのレベルのチェックがあります。

var destElement = annotDict.Elements["/Dest"];

if (destElement == null)
{
    continue;
}

var destElementName = destElement as PdfName;
if (destElementName == null)
{
    continue;
}
于 2015-01-05T23:49:55.513 に答える
-3

物事はnullです。

それはそれを引き起こすでしょう。

[編集]:これが私がテストしたコードです:

protected void Button3_Click(object sender, EventArgs e)
{
    MyMethod(null);
}

public void MyMethod(String thing)
{
    if (thing == null)   //  This caused the exception to be thrown.
        throw new Exception("test");

    //Do other stufff....
}
于 2012-10-16T01:07:54.123 に答える