c# - 空文字 - vb.net null 判定




オブジェクトがnullの場合に空の文字列を返す方法 (2)

ここに私のコードのスニペットがあります:

var link = socials.Where(p => p.type == Facebook).FirstOrDefault().URL;

問題はリストにソーシャルオブジェクトがないこと.URL FirstOrDefault() null返し、 .URLは例外をトリガーします。

LINQの "one"行でこれを避けるにはどうすればいいですか? したがって、nullが空の"" (またはカスタムの方が良い)文字列を返す場合は、そうでなければ.URL


C#6を使用すると、LINQ文から返されたオブジェクトがnullでない場合、つまり値が見つかった場合、またはnull otherwsieの場合にnull 条件付き演算子?. )を使用してURLを返すことができnull

var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL;

空の文字列またはカスタム文字列にnull値を変更する場合は、 NULL合体演算子?? )を使用します

var link = socials.Where(p => p.type == Facebook).FirstOrDefault()?.URL ?? "No URL";

これは、オブジェクトが見つからなかったか、オブジェクトが見つかったがURL値がnullかどうかを区別しないことに注意してください。


別のオプションは、ヌル結合演算子を使用することです

var link = (socials
    .Where(p => p.type == Facebook)
    .Select(p => p.Url)
    .FirstOrDefault()) ?? string.empty;

私はstring.empty""以上であることを理解しstring.emptyが、 string.emptyはないかもしれません - 下記のコメントを参照してください。

UPDATE C#6には、空の条件演算子(「Elvis」演算子とも呼ばれます)があります。

var link = socials
    .Where(p => p.type == Facebook)
    .Select(p => p.Url)
    .FirstOrDefault()?.URL ?? string.empty;

簡単な例:

stringbuilder sb = null;
// do work
string s = sb?.ToString() ?? "no values found"; 






null