1. ホーム
  2. c#

[解決済み】C#でオブジェクトがNULLかどうかをチェックする

2022-04-03 14:52:22

質問

オブジェクトがNULLの場合、それ以上の処理を行わないようにしたい。

次のコードでは、オブジェクトがNULLかどうかをどちらかによってチェックしています。

if (!data.Equals(null))

そして

if (data != null)

しかし、私は NullReferenceExceptiondataList.Add(data) . オブジェクトが NULL だった場合、そのオブジェクトは if -ステートメントを使用します。

このように、オブジェクトがヌルであるかどうかをチェックする方法が適切かどうかを尋ねているのです。

public List<Object> dataList;
public  bool AddData(ref Object data)
    bool success = false;
    try
    {
        // I've also used "if (data != null)" which hasn't worked either
        if (!data.Equals(null))
        {
           //NullReferenceException occurs here ...
           dataList.Add(data);
           success = doOtherStuff(data);
        }
    }
    catch (Exception e)
    {
        throw new Exception(e.ToString());
    }
    return success;
}

もしこれがオブジェクトがヌルであるかどうかをチェックする適切な方法であるなら、私は何を間違えているのでしょうか(NullReferenceExceptionを回避するために、オブジェクトに対してそれ以上の処理を行わないようにするにはどうすればよいでしょうか)。

どのように解決するのですか?

それは data というのは null しかし dataList .

で作成する必要があります。

public List<Object> dataList = new List<Object>();

さらに良いのは、フィールドなので private . そして、何も問題がなければ、それを readonly . いい練習になりますよ。

ヌルヌルチェックの正しい方法は if(data != null) . このようなチェックは参照型ではよくあることです。 Nullable<T> は、より便利な表現方法として、等号演算子を上書きしています。 nullable.HasValue を使用する。

もし、あなたが if(!data.Equals(null)) を実行すると NullReferenceException もし data == null . この例外を回避することがそもそもの目的だったので、ちょっと滑稽です。

こんなこともしているんですね。

catch (Exception e)
{
    throw new Exception(e.ToString());
}

これは絶対にダメです。メソッドの中にいながらデバッガに侵入できるように、この段落を置いたのだろうと想像できますが、その場合はこの段落を無視してください。そうでなければ、無駄に例外をキャッチしないようにしましょう。そうでなければ、無駄に例外をキャッチしないでください。 throw; .