#概要
業務でC#を触っていたら、たまたま変数に!
をつける方法を見つけたが、調べてみてもなかなかヒットせず…
なんと、通常の検索エンジンでは!
という記号は調べられないとのこと!知らなかった!
ということで、C#8.0で登場したnull免除演算子
について紹介したいと思います!
本記事は、C#リファレンスの内容を簡単にまとめたものになりますので、詳しく知りたい方は下記リンクへどうぞ
↓
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/null-forgiving
#null免除演算子(!)とは
変数x
にnull免除演算子(!
)をつけると、xはnullでないことを保証する
といった意味になります。
例えば、Resharperなどのコードフォーマッタがエディタ上で警告を出している場合、null免除演算子を用いることで警告を生成しないようにすることができます。
これを用いることで、例外処理の記述を省略することができ、コードの量を削減することができます。
一方で、例外処理の記述が省いてしまうため、多用してしまうとデバッグが困難になる可能性があります。
具体例とともに見ていきましょう。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ConsoleApp1
{
internal class Program
{
public static List<Person> PersonList = new()
{
new Person { Name = "桜井" },
new Person { Name = "坂崎" },
new Person { Name = "高見沢" },
};
private static void Main()
{
var person = PersonList.FirstOrDefault(p => p.Name == "高見沢");
Console.WriteLine(person.Name);
}
}
internal class Person
{
public string Name;
}
}
このようなコードがあったとき、Resharperなどのコードフォーマッタを使用していると、画像のような警告文が表示されます。
この警告文を出さないようにする方法として、「変数がnullの場合は例外を投げるようにする」といった方法があります。
しかし、これを複数重ねてしまうとコードの量がどんどん増えてしまいます。
// 警告文を出さないために、nullの場合例外を投げる
private static void Main()
{
var person = PersonList.FirstOrDefault(p => p.Name == "高見沢");
if (person == null)
{
throw new KeyNotFoundException();
}
Console.WriteLine(person.Name);
}
そこで、null免除演算子を用いて、コードの量を抑えつつ警告文をでないようにすることができます。
// null免除演算子(!)をつけると、警告文が出なくなる
private static void Main()
{
var person = PersonList.FirstOrDefault(p => p.Name == "高見沢");
Console.WriteLine(person!.Name);
}
#まとめ
総合的にみるとnull演算子によるメリットに対して、デメリットの方が多いように感じます。
そのため、確実にnullでないことを保証できる場合のみに限定するのがよいかもしれません…