Object reference not set to an instance of an object"とは、どのような意味ですか?

このエラーが表示されるのですが、どういうことでしょうか?

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

質問へのコメント (2)

.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に遭遇する可能性がある時期については、はるかに複雑な[例][7]を確認してください。

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

[7]:http://www.danielfortunov.com/software/$ daniel_fortunovs_adventures_in_software_development/2009/04/23/net_event_invocation_thread_safety。

解説 (3)

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


 Person myPet = GetPersonFromDatabase();
 // check for myPet == null... AND for myPet.PetType == null
 if ( myPet.PetType == "cat" ) 
解説 (1)

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

例:


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

MyClass myClass;

myClass.Id = 0; 
解説 (1)

ぶっきらぼうに言うわけではありませんが、まさにその通りの意味です。オブジェクト参照の1つがNULLになっています。NULL'されたオブジェクトのプロパティやメソッドにアクセスしようとすると、このように表示されます。

解説 (2)

というようなことをやったということです。

Class myObject = GetObjectFromFunction();

そして、することなくすること

if(myObject!=null), you go ahead domyObject.Method();`.

解説 (0)

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

自己学習のために、チェック条件を設定できます。 お気に入り。

if (myObj== null)
Console.Write("myObj is NULL");
解説 (0)

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

Nullオブジェクトを、あたかも適切なオブジェクトであるかのように使おうとしているのですから、まさにその通りです。 参照されるオブジェクト。

解説 (1)

クラスがある場合:

public class MyClass
{
   public void MyMethod()
   {

   }
}

そして私はそうします:

MyClass myClass = null;
myClass.MyMethod();

2行目は、この例外をスローします。これは、参照タイプオブジェクトで「null」(つまり、. myClass = new MyClass())を呼び出すことによって実証されていません。

解説 (1)