私のプログラムでは、各フィールドからデータを取得するためにデータテーブルをループしています。私の1行のコードは次のようになります。intに変換する前にnullフィールドをゼロに変換しますか?
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"]);
基本的に、私はちょうどセル内の値を取り、INT32に変換しています。しかし、フィールド内のデータがnullの場合、私は問題に遭遇します。 "DBNull"を別のタイプに変換できないというInvalid Castエラーメッセージが表示されます。
だから、私はこのような何かを行うことによって、それを変換しようとする前に、私はちょうどフィールドの値を確認することができることを知っている:
if (resultsDT.Rows[currentRow]["LYSMKWh"] == null)
{
resultsDT.Rows[currentRow]["LYSMKWh"] = 0;
}
をしかし、これを行うには良い方法はありますか? if
に頼らなくても値を変換しようとしている間に、「インライン」でできることはありますか?
編集:私は、この提案された方法を使用してみました:
int LYSMKWh = Convert.ToInt32(resultsDT.Rows[currentRow]["LYSMKWh"] ?? "0");
残念ながら、私はまだはDBNullタイプに関して不正なキャストのエラーメッセージを受信しました。それは私が問題を持つ可能性が示唆された??どちらかの側の型が異なる場合は演算子
また、データテーブルを構築しているデータを完全に制御できるため、null値がどのフィールドにも書き込まれないように変更しました。したがって、nullをint32に変換する必要はほとんどありません。この場合はint32に変換されます。すべてのアドバイス、みんなありがとう!
これは実際に私のためにかなり良い仕事をした。私は以下の例を??私はまだ無効なキャストエラーメッセージを取得してしまった。 CodeNakedが下で述べたどのユーザーから、??いずれかの側の型が異なる場合。 – Kevin