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();
ただし、これを行う最適な方法が見つかりません。より良い方法がありますか、それを行うための最良の方法がありますか?
これを試して:
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つと同じです。他のすべてのケースでは、最初の例で示したように、条件演算子を使用する必要があります。
合体演算子(??) はあなたが望むものです、私は信じています。
私が思うに、あなたが思いつくことができる最高のものは
this.approved_by = IsNullOrEmpty(planRec.approved_by) ? string.Empty
: planRec.approved_by.ToString();
もちろん、approved_by
はobject
( ""に等しくすることはできません)で、これは次のように書き換えられます
this.approved_by = (planRec.approved_by ?? string.Empty).ToString();
C#合体演算子を探しています:??この演算子は、左右の引数を取ります。演算子の左側がnullまたは値なしのnullableである場合、右側の引数を返します。それ以外の場合は、左に戻ります。
var x = somePossiblyNullValue ?? valueIfNull;
C#6では、planRec.approved_byが文字列ではない場合、少し短い方法があります。
this.approved_by = planRec.approved_by?.ToString() ?? "";
C#合体演算子を使用します:??
// if Value is not null, newValue = Value else if Value is null newValue is YournullValue
var newValue = Value ?? YourNullReplacement;
拡張するには @ Dave's answer ... planRec.approved_byがすでに文字列である場合
this.approved_by = planRec.approved_by ?? "";
実際の変数名を繰り返さずに(および変数が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);
クエリ、たとえばsqlサーバー、google ISNULL
およびCASE
組み込み関数でも実行できます。