C#

C# | null判定の基本と実践:安全なコードを書くためのガイド

2024年7月3日

本ページはプロモーションが含まれています

C#null判定アイキャッチ画像

null判定とは、プログラミング言語において、変数やオブジェクトが「null」であるかどうかを確認することです。

nullは「値が存在しない」ことを示し、特定のデータが存在しない状態を表現します。

null判定を行うことで、プログラムが予期せぬエラーを回避したり、適切な処理を行うための条件分岐を設定することができます。

IsNullOrEmpty メソッド

文字列が null または空であるかを判定する便利なメソッド。

string str = null;
if (string.IsNullOrEmpty(str))
{
    // str は null または空です
}

null合体演算子 (??)

左辺の値が null の場合に、右辺の値を代入する演算子。

string name = null;
string displayName = name ?? "Guest";
// displayName は "Guest" になる

null条件演算子 (?.)

null チェックとプロパティへのアクセスを安全に行う演算子。

var person = new Person();
string city = person.Address?.City;
// person.Address が null の場合、city は null になる

null判定に関する主な疑問や問題点について、以下のようなものがあります。

  1. Null判定をするメソッド:Null判定をするメソッドは何があるのか知りたい。
  2. Null合体演算子 (??): Null合体演算子を使用して、nullでない値が得られるまでのコードの書き方とは。
  3. Null条件演算子 (?.): Null条件演算子を使用して、nullでない値が得られるまでのコードの書き方とは。
  4. Null参照例外の回避: Null参照例外を回避するための安全なnull判定の方法について。
  5. Null判定の使用場面:どのような場面で有効なのか。

この記事ではこれらについても詳しく解説します。

nullとはなにか

nullは、C#を含む多くのプログラミング言語で使用される特殊な値です。

これは「値が存在しない」または「データが設定されていない」状態を表します。

nullは参照型に適用され、変数がオブジェクトを参照していないことを示します。

string name = null; // name変数はオブジェクトを指していない

nullの定義: nullは、参照型変数がオブジェクトを指していないことを意味する特殊な値です。
これは変数がまだ初期化されていないか、明示的にnullが設定されていることを示します。

nullの用途: nullは、データが存在しない、まだ設定されていない、または意図的に空の値を持つことを示すために使用されます。例えば、データベースからレコードを取得した際に、該当するデータが存在しない場合にnullが返されることがあります。

null判定の簡単な例

最も基本的なnull判定の方法は、if文を使用することです。

これは、変数がnullかどうかをチェックし、nullであれば特定の処理を行う、または処理をスキップするために使用されます。

string name = null;

if (name == null)
{
    Console.WriteLine("nameはnullです");
}
else
{
    Console.WriteLine($"nameの長さは{name.Length}です");
}

null判定をするメソッド:IsNullOrEmpty

IsNullOrEmptyメソッドは、C#のstringクラスに定義された静的メソッドです。

このメソッドは、与えられた文字列がnullまたは空文字列("")であるかを確認します。

メソッドは、bool型の値を返します。

trueが返される場合、文字列はnullまたは空です。

falseが返される場合、文字列には何らかの値が含まれています。

IsNullOrEmptyメソッドの使用例

ユーザーが入力したデータがnullまたは空であるかを検証する例です。

using System;

class Program
{
    static void Main()
    {
        Console.Write("名前を入力してください: ");
        string name = Console.ReadLine();

        if (string.IsNullOrEmpty(name))
        {
            Console.WriteLine("名前は必須です。");
        }
        else
        {
            Console.WriteLine($"こんにちは、{name}さん!");
        }
    }
}

null合体演算子をつかったnull判定

null合体演算子(??)は、変数がnullの場合にデフォルト値を設定するために使用されます。

以下の例では、nameがnullの場合、displayNameには"No Name"が設定されます。

  • name ?? "No Name";
    • もし name が null でない場合、name の値がそのまま結果となります。
    • もし name が null の場合、代わりに "No Name" が結果となります。
string name = null;
string displayName = name ?? "No Name";

Console.WriteLine(displayName); // 出力: No Name

null条件演算子をつかったnull判定

null条件演算子(?.)は、オブジェクトがnullでない場合に、そのオブジェクトのメンバー(プロパティやメソッド)にアクセスするための演算子です。

null条件演算子を使用することで、null参照エラーを防ぐことができます。

以下の例では、personがnullの場合、ageにはnullが設定されます。

ageがnullでない場合にのみ年齢を表示します。

  • person?.Name;
    • person が null の場合、name 変数には自動的に null が設定されます。
    • person が null でない場合、Name プロパティの値が name 変数に代入されます。
class Person
{
    public string Name { get; set; }
}

class Program
{
    static void Main()
    {
        Person person = null;
        string name = person?.Name;
        Console.WriteLine(name);  // 出力: (null)
    }
}

Null参照例外の回避

Null参照例外を回避するために、安全なnull判定の方法として以下の手法があります。

  • 条件演算子 (if 文): 変数が null でないことを確認してから、その変数にアクセスする方法です。例えば、if (person != null) のように条件をチェックし、その中で安全に操作を行います。
  • Null条件演算子 (?.): Null条件演算子を使用することで、null チェックとプロパティやメソッドの呼び出しを一度に行うことができます。例えば、string name = person?.Name; のように、person が null でない場合にのみ Name プロパティにアクセスします。
  • Null合体演算子 (??): Null合体演算子を使用することで、変数が null の場合に代替の値を設定できます。例えば、string name = person?.Name ?? "Unknown"; のように、Name プロパティが null の場合には代わりに "Unknown" を設定します。

null判定の使用場面

以下の主なnull判定の使用場面を紹介します。

  • データベースからのデータ取得
  • ユーザー入力の検証
  • APIからのレスポンス処理
  • コレクションの操作
  • ファイル操作

データベースからのデータ取得

データベースからデータを取得する際、null値が返ってくる可能性があります。
これをチェックしないと、後続の処理でエラーが発生する可能性があります。

var user = GetUserFromDatabase(userId);
if (user != null)
{
    Console.WriteLine($"ユーザー名: {user.Name}");
}
else
{
    Console.WriteLine("ユーザーが見つかりませんでした。");
}

ユーザー入力の検証

ユーザーからの入力がnullまたは空であるかを確認することは、フォームの検証で重要です。

string input = GetUserInput();
if (!string.IsNullOrEmpty(input))
{
    ProcessInput(input);
}
else
{
    Console.WriteLine("入力が無効です。");
}

APIからのレスポンス処理

外部APIからのレスポンスデータがnullであるかをチェックし、適切なエラーハンドリングを行うことが必要です。

var response = GetApiResponse();
if (response != null && response.IsSuccess)
{
    HandleSuccessResponse(response);
}
else
{
    HandleErrorResponse();
}

コレクションの操作

コレクションがnullまたは空であるかをチェックして、安全に操作する必要があります。

List<int> numbers = GetNumbers();
if (numbers != null && numbers.Any())
{
    foreach (var number in numbers)
    {
        Console.WriteLine(number);
    }
}
else
{
    Console.WriteLine("リストは空です。");
}

ファイル操作

ファイルから読み取ったデータがnullである可能性がある場合、そのチェックが必要です。

string fileContent = ReadFile(filePath);
if (!string.IsNullOrEmpty(fileContent))
{
    ProcessFileContent(fileContent);
}
else
{
    Console.WriteLine("ファイルが空または存在しません。");
}

まとめ

  • 基本的な方法
    • ifステートメントを使用してnullチェックを行う。
    • != null演算子を使ってnullでないことを確認する。
  • 便利なメソッド
    • string.IsNullOrEmpty()を使用して文字列のnullまたは空の判定を行う。
  • 安全なコーディングの実践
    • null許容型(Nullable型)を使用して、値型にnullを格納できるようにする。
    • 合体演算子(??演算子)を使用することで、変数が null の場合に代替の値を設定できます。
    • 条件演算子(?.演算子)を使用して、null参照を安全に操作する。

Follow me!

-C#
-,

PAGE TOP