web-dev-qa-db-ja.com

nullをチェックし、そうでない場合は別の値を割り当てる最短の方法

DBからvarcharの値を取得しており、stringを設定したいのですが、nullの場合、それらを ""として割り当てています。私は現在このようにしています:

if (string.IsNullOrEmpty(planRec.approved_by) == true)
  this.approved_by = "";
else
  this.approved_by = planRec.approved_by.toString();

次のような1行でこれを行う方法があるはずです。

this.approved_by = "" || planRec.approved_by.toString();

ただし、これを行う最適な方法が見つかりません。より良い方法がありますか、それを行うための最良の方法がありますか?

63
Splashlin

これを試して:

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? "" : planRec.approved_by.toString();

また、他の人が言ったようにヌル合体演算子を使用することもできます-あなたのコードで動作する例を挙げている人は誰もいないからです:

this.approved_by = planRec.approved_by ?? planRec.approved_by.toString();

しかし、この例は、this.approved_byは、設定する可能性のある値の1つと同じです。他のすべてのケースでは、最初の例で示したように、条件演算子を使用する必要があります。

84
Andrew Hare

合体演算子(??) はあなたが望むものです、私は信じています。

29
Dave Ward

私が思うに、あなたが思いつくことができる最高のものは

this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
                                                      : planRec.approved_by.ToString();

もちろん、approved_byobject( ""に等しくすることはできません)で、これは次のように書き換えられます

this.approved_by = (planRec.approved_by ?? string.Empty).ToString();
25
Dmitri Nesteruk

C#合体演算子を探しています:??この演算子は、左右の引数を取ります。演算子の左側がnullまたは値なしのnullableである場合、右側の引数を返します。それ以外の場合は、左に戻ります。

var x = somePossiblyNullValue ?? valueIfNull;
22
JaredPar

C#6では、planRec.approved_byが文字列ではない場合、少し短い方法があります。

this.approved_by = planRec.approved_by?.ToString() ?? "";
13
Malcolm

C#合体演算子を使用します:??

// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;
10
Ramgy Borja

拡張するには @ Dave's answer ... planRec.approved_byがすでに文字列である場合

this.approved_by = planRec.approved_by ?? "";
9
Paul Alexander

実際の変数名を繰り返さずに(および変数がnullの場合は何も割り当てないで!)空でない変数を割り当てるには、Actionパラメーターを指定した小さなヘルパーメソッドを使用できます。

public static void CallIfNonEmpty(string value, Action<string> action)
{
    if (!string.IsNullOrEmpty(value))
        action(value);
}

そしてそれを使うだけです:

CallIfNonEmpty(this.approved_by, (s) => planRec.approved_by = s);
2
Jack Miller

クエリ、たとえばsqlサーバー、google ISNULLおよびCASE組み込み関数でも実行できます。

1
user133371