DBNull の簡潔な使用法?(三進法?)
-
27-09-2019 - |
質問
三項演算子に型の混乱があるようです。これが他の SO スレッドで対処されていることは知っていますが、Nullable に関しては常に問題でした。また、私の場合は、より良い方法を探しているだけです。
使えるようになりたいです
proc.Parameters[PARAM_ID].Value =
string.IsNullOrEmpty(dest.Id) ? DBNull.Value : dest.Id;
しかし代わりに、私はこれで立ち往生しています:
if (string.IsNullOrEmpty(dest.Id))
{
proc.Parameters[PARAM_ID].Value = DBNull.Value;
}
else
{
proc.Parameters[PARAM_ID].Value = dest.Id;
}
DBNull と string の間で変換ができないため、三項演算子は失敗します。Value がオブジェクトであることを考慮すると愚かに見えるかもしれませんが、コンパイラがそれをキックバックするため、私は気にする必要があります。この質問の null 許容バージョンに対する答えは、null を文字列にキャストするだけで完了です。ただし、DBNull を文字列にキャストできないため、うまくいきません。
これを行うためのより簡潔な方法はありますか(ちなみに、Nullableを使用せずに?)
ありがとう!
解決
最初のステートメントを次のように変更できます: ジェネラコディセタグプレ
他のヒント
の Value
プロパティのタイプは次のとおりです object
, したがって、次のようにキャストする必要があります object
, 、 ない string
:
proc.Parameters[PARAM_ID].Value = string.IsNullOrEmpty(dest.Id)
? (object)DBNull.Value
: (object)dest.Id;
または、次のような拡張メソッドを追加することもできます: ジェネラコディセタグプレ
そして、あなたはただ言うことができます ジェネラコディセタグプレ
( Phil Haack から引用)
読みやすく簡潔ですよね?
??を使用するのはどうですか?null合体演算子
所属していません StackOverflow