質問

三項演算子に型の混乱があるようです。これが他の 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合体演算子 ??の詳細オペレーター ジェネラコディセタグプレ

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top