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


86

私が引っ張っていvarcharDBから値をし、設定したい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();

しかし、これを行うための最適な方法を見つけることができません。より良い方法はありますか、それとも私がそれを行うための最良の方法がありますか?


5
== trueが...ここに不必要である
日中韓

回答:


104

これを試して:

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

他の人が言っているように、null合体演算子を使用することもできます-ここであなたのコードで動作する例を誰も与えていないので、次の1つです:

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

ただし、この例は、の可能な値this.approved_byが、設定したい潜在的な値の1つと同じであるためにのみ機能します。他のすべての場合は、最初の例で示したように、条件演算子を使用する必要があります。


8
このnull合体演算子はとにかくnullreferenceをスローしませんか?このコードの見方は次のとおりですif (planRec.approved_by == null) { this.approved_by = planRec.approved_by.toString(); //<= nullref } else { this.approved_by = planRec.approved_by;}。私が間違っている場合は、エラーを指摘してください。
Destrictor 2013

10
@Destrictorは正しいです、コードは壊れています。別の楽しい演算子を使用した修正は次のとおりです。this.approved_by = planRec.approved_by?.toString() ?? ""; <-これはnull条件演算子であり、この質問が最初に尋ねられて回答されたときはそうではなかったと思います。うまくいけば、OPはこれを見て、2つの仕事の前から7年前のコードをリファクタリングすることができます:)。
パトリック


30

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

var x = somePossiblyNullValue ?? valueIfNull;

この回答は、質問のすべてのケースを網羅しているわけではありません(部分的にのみ)。「string.IsNullOrEmpty」があることに注意してください。したがって、ここでは空のケースは処理されません。
Bronek

28

私の推測はあなたが思いつくことができる最高です

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

もちろんapproved_byobject( ""と等しくなることはできません)であるという事実をほのめかしているので、これは次のように書き直されます。

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

20

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

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

15

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

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

15

C#8.0以降では、?? =演算子を使用してフォームのコードを置き換えることができます。

if (variable is null)
{
    variable = expression;
}

次のコードで:

variable ??= expression;

詳細はこちら



2

実際の変数名を繰り返さずに(そして変数が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);

1

また、SQLサーバー、グーグルISNULLCASE組み込み関数などのクエリでも実行できます。


-4

拡張メソッドSelfChkを使用します

static class MyExt {
//Self Check 
 public static void SC(this string you,ref string me)
    {
        me = me ?? you;
    }
}

次に、次のように使用します

string a = null;
"A".SC(ref a);

意味はあると思いますが、読みやすく、理解しやすいとは言えませんね。
Ali Humayun 2017

3
UPS!あなたは絶対に正しいです:非常に短いですが、読みやすく理解するのは簡単ではありません(少なくともこの表記法に慣れていない場合)
Jack Miller

その場合は本を読んでみてください。あなたはそれが本当に精巧で理解しやすいと思うでしょう:p
Ali Humayun 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.