SQLテーブルを照会し、見つかった値を新しいオブジェクトリストに割り当てるメソッドを構築しようとしています。ここではそれがどのように動作するかの簡単な例は、(リーダーと接続が設定され、正常に動作していると仮定)です:SqlDataReaderオブジェクトのインラインNullチェック
List<MyObject> results = new List<MyObject>();
int oProductID = reader.GetOrdinal("ProductID");
int oProductName = reader.GetOrdinal("ProductName");
while (reader.Read())
{
results.Add(new MyProduct() {
ProductID = reader.GetInt32(oProductID),
ProductName = reader.GetString(oProductName)
});
}
約40他のプロパティはがMyObject
定義におけるNULL可能なそれらのすべてので、私は、あまりにもあります。割り当てをできるだけ整然としたままにしようとしています。問題は、読者がnullを返すたびに、オブジェクトにnull値を割り当てる必要があることです。上記のコードでは、リーダーが "Data is Null"例外をスローした場合。 if
ステートメントを使用してDbNull
を最初に確認することは可能ですが、非常に多くのプロパティがあるため、すべてのプロパティに対してif
ステートメントを記述する必要がないため、コードをきれいに保ちたいと考えています。
検索のビットがnull-coalescingオペレータにつながりました。これは、私が欲しいものを正確に行う必要があるようです。だから私はこのようにして割り当てを変更しようとした:
ProductID = reader.GetInt32(oProductID) ?? null,
ProductName = reader.GetString(oProductName) ?? null
任意のstring
のため正常に動作しますが、私にstring
除くOperator '??' cannot be applied to operands of type 'int' and '<null>'
(または他のデータ型のエラーを与える私は、具体的int
(および他のすべて)アウトと呼ばれます。ここではオブジェクト定義でNULL可能、しかしとして、それは、それはそれを行うことができない私に言っています
質問
、この場合缶にNULL値を処理するための方法ですが:(1)明確にインラインで書かれています(各物件の個別のif
ステートメントを避けるため)。(2)どのデータ型でも使用できますか?
エレガントにシンプルで、驚くほどうまく機能します。帽子はあなたに捨てられています。 – thanby