231

このエラーが表示されますが、それが何を意味するのかわかりませんか?

オブジェクト参照がオブジェクト インスタンスに設定されていません。

4

8 に答える 8

195

.NET の変数は、参照型または値型のいずれかです。値の型は、整数ブール値または構造体などのプリミティブです ( System.ValueType から継承されるため識別できます)。ブール変数は、宣言されると、デフォルト値を持ちます。

bool mybool;
//mybool == false

参照型が宣言されている場合、デフォルト値はありません。

class ExampleClass
{
}

ExampleClass exampleClass; //== null

null 参照を使用してクラス インスタンスのメンバーにアクセスしようとすると、System.NullReferenceExceptionが発生します。これは、オブジェクトのインスタンスに設定されていないオブジェクト参照と同じです。

次のコードは、これを再現する簡単な方法です。

static void Main(string[] args)
{
    var exampleClass = new ExampleClass();
    var returnedClass = exampleClass.ExampleMethod();
    returnedClass.AnotherExampleMethod(); //NullReferenceException here.
}

class ExampleClass
{
    public ReturnedClass ExampleMethod()
    {
        return null;
    }
}

class ReturnedClass
{
    public void AnotherExampleMethod()
    {
    }
}

これは非常に一般的なエラーであり、あらゆる種類の理由で発生する可能性があります。根本的な原因は、実際に遭遇した特定のシナリオによって異なります。

API を使用しているか、null を返す可能性のあるメソッドを呼び出している場合は、これを適切に処理することが重要です。上記のメイン メソッドは、NullReferenceException がユーザーに表示されないように変更できます。

static void Main(string[] args)
{
    var exampleClass = new ExampleClass();
    var returnedClass = exampleClass.ExampleMethod();

    if (returnedClass == null)
    {
        //throw a meaningful exception or give some useful feedback to the user!
        return;
    }

    returnedClass.AnotherExampleMethod();
}

上記のすべては、実際には .NET Type Fundamentals のヒントにすぎません。詳細については、C# を介して CLR を取得するか、同じ著者である Jeffrey Richter によるこのMSDN 記事を読むことをお勧めします。また、NullReferenceException が発生する可能性がある場合の、より複雑な例も確認してください。

Resharper を使用している一部のチームは、JetBrains 属性を使用してコードに注釈を付け、null が予期される (予期されない) 場所を強調しています。

于 2009-04-22T20:51:51.207 に答える
28

一言で言えば、インスタンス化せずにオブジェクトにアクセスしようとしています..「new」キーワードを使用して最初にインスタンス化する必要がある場合があります。つまり、インスタンスを作成します。

例:

public class MyClass
{
   public int Id {get; set;}
}

MyClass myClass;

myClass.Id = 0; <----------- An error will be thrown here.. because myClass is null here...

以下を使用する必要があります。

myClass = new MyClass();
myClass.Id = 0;

私がそれを明確にしたことを願っています..

于 2014-11-10T08:24:53.207 に答える
23

これを取得する別の簡単な方法:

 Person myPet = GetPersonFromDatabase();
 // check for myPet == null... AND for myPet.PetType == null
 if ( myPet.PetType == "cat" ) <--- fall down go boom!
于 2009-04-22T21:39:21.060 に答える
10

率直に言ってはいけませんが、それはまさにそれが言っていることを意味します。オブジェクト参照の1つがNULLです。NULLされたオブジェクトのプロパティまたはメソッドにアクセスしようとすると、これが表示されます。

于 2009-04-22T20:34:26.787 に答える
5

このようなことをしたということです。

Class myObject = GetObjectFromFunction();

そして何もせずに

if(myObject!=null)、どうぞどうぞmyObject.Method();

于 2009-04-22T20:36:29.213 に答える
2

ほとんどの場合、オブジェクトに値を代入しようとすると、値が null の場合、この種の例外が発生します。このリンクを確認してください。

自己学習のために、いくつかのチェック条件を入れることができます。お気に入り

if (myObj== null)
Console.Write("myObj is NULL");
于 2009-04-22T20:49:25.593 に答える
1

このエラーはどういう意味ですか? オブジェクト参照がオブジェクト インスタンスに設定されていません。

まさにそれが言っていることですが、適切に参照されたオブジェクトであるかのように null オブジェクトを使用しようとしています。

于 2009-04-22T20:36:33.537 に答える