コードインスペクション:「??」条件が null か null でないことがわかっています。
値を代入したり、引数を渡したり、識別子の NULL 可能性に基づいてメソッドから戻る場合は、これらの場合に使用できる最もわかりやすい構文は ?? (null-coalescing) 演算子です。
null 合体式は次のように動作します。 最初に左側のオペランドが評価され、NULL の場合は右側のオペランドが評価され、結果が全体の式の結果になります。
ただし、冗長な NULL 合体式はデッドコードを生成し、読みやすさを妨げます。 ?? 演算子の論理からわかるように、 null を右側のオペランドとして使用しても意味がありません。 以下で、ReSharper は右側のオペランド null を ?? 演算子と一緒に削除することを提案しています。なぜなら、 newCategory が null の場合、いずれにしても Category に null が代入されるためです:
public class Customer
{
public string Category { get; set; }
private void ChangeCategory(string newCategory)
{
Category = newCategory ?? null;
}
/* … */
}
public class Customer
{
public string Category { get; set; }
private void ChangeCategory(string newCategory)
{
Category = newCategory;
}
/* … */
}
NULL 合体演算子が冗長な場合のもう 1 つの状況は、左側のオペランドが NULL になることがない場合です。 この場合、右側のオペランドに到達することはなく、ReSharper が到達不能コードの削除を提案します:
string name = "John";
Console.WriteLine(name ?? "empty");
string name = "John";
Console.WriteLine(name);
2026 年 6 月 12 日