1. ホーム
  2. c#

[解決済み] nullとSystem.DBNull.Valueの違いは何ですか?

2023-01-13 01:14:55

質問

nullとSystem.DBNull.Valueの間に違いはありますか?もしあるならば、それは何ですか?

私は今、この動作に気づきました - 。

while (rdr.Read())
{
    if (rdr["Id"] != null) //if (rdr["Id"] != System.DBNull.Value)  
    {
        int x = Convert.ToInt32(rdr["Id"]);
    }
}

sql datareaderを使ってデータベースからデータを取得する間、値が返されないが if(rdr["Id"] != null) 返された true を返し、最終的にはnullを整数としてキャストしたために例外が投げられました。

しかし、これはもし私が if (rdr["Id"] != System.DBNull.Value)false .

nullとSystem.DBNull.Valueの違いは何ですか?

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

さて null はどの型のインスタンスでもありません。むしろ、それは無効な参照です。

しかし System.DbNull.Value のインスタンスへの参照は有効です。 System.DbNull ( System.DbNull はシングルトンであり System.DbNull.Value はそのクラスのシングルインスタンスへの参照を与えます)、それは存在しない * の値を表します。

*通常、私たちは次のように言います。 null と言いますが、問題を混乱させないようにするためです。

というわけで、この2つには大きな概念の違いがあります。キーワード null は無効な参照を表します。クラス System.DbNull はデータベースのフィールドに存在しない値を表します。一般に、同じもの(この場合は null を使用することは避けるべきです。

これが、多くの人が null オブジェクト パターン を使うことを提唱しているのは、まさにこのためです。 System.DbNull はその一例です。