C# Equals() メソッド エラー: NullReferenceException が処理されませんでした

以下は C# メソッドの例でありEquals()、実行中にエラーが報告されます。

static void Main(string[] args)
{
    string name = "sandeep";
    string myName = null;
    Console.WriteLine("== operator result is {0}", name == myName);
    Console.WriteLine("Equals method result is {0}", myName.Equals(name));
    Console.ReadKey();
}

エラーメッセージは次のとおりです。

NullReferenceException が処理されませんでした

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

等しいエラー: NullReferenceException が処理されませんでした


等しいエラー: NullReferenceException が処理されませんでした

null 参照例外が処理されなかったこと、つまりオブジェクト参照がオブジェクト インスタンスに設定されなかったことを意味します。

その原因をどのように分析すべきでしょうか?これには、==演算子とメソッドEquals()の違いを理解する必要があります。

==演算子とEquals()メソッドはいずれも、2 つの値型データ項目または参照型データ項目を比較するために使用されます。等価演算子 ( ) は、文字列の内容を比較する==比較演算子です。オペレーターは参照 ID を比較しますが、メソッドはコンテンツのみを比較します。いくつかの例を見てみましょう。Equals()==Equals()

以下の例では、文字列変数を別の変数に代入しています。文字列は参照型です。この例では、ある文字列変数が別の文字列変数に割り当てられているため、それらはヒープ内の同じ ID を参照し、両方とも同じ内容を持つため、True 出力が得られます==Equals()

using System;

namespace ComparisionExample
{
   class Program
    {
      static void Main(string[] args)
       {
          string name = "sandeep";
          string myName = name;
          Console.WriteLine("== operator result is {0}", name == myName);
          Console.WriteLine("Equals method result is {0}", name.Equals(myName));
          Console.ReadKey();
        }

    }
}

ここでプログラムを実行すると、図 1.1 に示す結果が得られます。

 

図 1.1 最初のプログラムの出力


図 1.1 最初のプログラムの出力

2 つのオブジェクト変数の内容は同じですが、両方の参照が異なる別の例を見てみましょう。したがって、==演算子は参照 ID を比較するためfalseを返し、Equals()メソッドはオブジェクトの内容を比較するためtrueを返します。

using System;
namespace ComparisionExample
{
   class Program
    {
       static void Main(string[] args)
        {
           object name = "sandeep";
           char[] values = {'s','a','n','d','e','e','p'};
           object myName = new string(values);
           Console.WriteLine("== operator result is {0}", name == myName);
           Console.WriteLine("Equals method result is {0}", myName.Equals(name));
           Console.ReadKey();
        }
    }
}

ここでプログラムを実行すると、図 1.2 に示す結果が得られます。

図 1.2 プログラム 2 の出力

 
図 1.2 プログラム 2 の出力

ここで、この記事の冒頭のエラー例に戻りましょう。この例では、文字列変数に null 値を代入してその変数を使用すると、そのメソッドは文字列クラスの拡張メソッドであり、Equals()メソッドEquals()はnull 参照例外があるため、Equals()メソッドを呼び出すときは、変数に null 値が含まれていないことを確認する必要があります。変数の 1 つに NULL 値が含まれている場合は、その変数をEquals()メソッドの引数として使用する必要があります。

図 1.3 Null 参照例外

 
図 1.3 Null 参照例外

経験則として、文字Equals列を除いて、ほぼすべての参照型について、参照の同一性ではなく等価性をテストする場合に使用します。==比較文字列を使用すると、処理が単純になり読みやすくなりますが、演算子の両側を覚えておく必要があります。比較が正しく機能するには、文字列型の式である必要があります。

おすすめ

転載: blog.csdn.net/mo3408/article/details/132194249