C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# 8.0のインデクサーと^演算子(末尾からのインデックス)の使い方


^ 演算子(末尾からのインデックス演算子)とは

C# 8.0 で新しく導入された ^ 演算子 は、「index from end operator(末尾からのインデックス演算子)」とも呼ばれます。

この演算子を使うと、シーケンスやコレクションの末尾を基準とした相対的なインデックスで要素にアクセスできます。たとえば list[^1] は最後の要素、list[^2] は最後から 2 番目の要素を意味します。

従来のように Count - 1Length - 1 を手動で計算する必要がなく、末尾側の要素を取得・更新するための最も簡潔で直感的な記述方法です。

基本的な使い方

company.listEmployees[^2].Name = "新しい構文で変更した従業員2の名前";
company.listEmployees[^5].Name = "新しい構文で変更した従業員5の名前";
company.listEmployees[^8].Name = "新しい構文で変更した従業員8の名前";

サンプルコード

次の例では、従業員 ID をキーとして名前を取得・変更できるカスタムインデクサーを持つ Company クラスを定義しています。さらに、^ 演算子を使ってリストの末尾から要素にアクセスし、名前を更新する方法も示しています。

public class Employee
{
    public int EmployeeId { get; set; }
    public string Name { get; set; }
    public string Gender { get; set; }
}

public class Company
{
    public List<Employee> listEmployees;

    public Company()
    {
        listEmployees = new List<Employee>();
        listEmployees.Add(new Employee { EmployeeId = 1, Name = "SS", Gender = "男性" });
        listEmployees.Add(new Employee { EmployeeId = 2, Name = "SSS", Gender = "女性" });
        listEmployees.Add(new Employee { EmployeeId = 3, Name = "SSSS", Gender = "男性" });
        listEmployees.Add(new Employee { EmployeeId = 4, Name = "EE", Gender = "女性" });
        listEmployees.Add(new Employee { EmployeeId = 5, Name = "EEEE", Gender = "女性" });
        listEmployees.Add(new Employee { EmployeeId = 6, Name = "TTT", Gender = "男性" });
        listEmployees.Add(new Employee { EmployeeId = 7, Name = "FFF", Gender = "男性" });
        listEmployees.Add(new Employee { EmployeeId = 8, Name = "GGG", Gender = "男性" });
    }

    // 従業員IDをキーとするカスタムインデクサー
    public string this[int employeeId]
    {
        get
        {
            return listEmployees
                .FirstOrDefault(x => x.EmployeeId == employeeId).Name;
        }
        set
        {
            listEmployees
                .FirstOrDefault(x => x.EmployeeId == employeeId).Name = value;
        }
    }
}

class Program
{
    public static void Main()
    {
        Company company = new Company();

        // インデクサー経由で名前を取得
        Console.WriteLine("ID = 2 の従業員の名前: " + company[2]);
        Console.WriteLine("ID = 5 の従業員の名前: " + company[5]);
        Console.WriteLine("ID = 8 の従業員の名前: " + company[8]);
        Console.WriteLine();

        // インデクサー経由で名前を変更
        Console.WriteLine("ID = 2, 5, 8 の従業員の名前を変更します");
        company[2] = "従業員2の名前を変更しました";
        company[5] = "従業員5の名前を変更しました";
        company[8] = "従業員8の名前を変更しました";
        Console.WriteLine();

        Console.WriteLine("ID = 2 の従業員の名前: " + company[2]);
        Console.WriteLine("ID = 5 の従業員の名前: " + company[5]);
        Console.WriteLine("ID = 8 の従業員の名前: " + company[8]);

        // ^ 演算子で末尾からアクセスして名前を変更
        company.listEmployees[^2].Name = "新しい構文で変更した従業員2の名前";
        company.listEmployees[^5].Name = "新しい構文で変更した従業員5の名前";
        company.listEmployees[^8].Name = "新しい構文で変更した従業員8の名前";
        Console.WriteLine();

        // ^ 演算子で末尾から名前を取得
        Console.WriteLine("ID = 2 の従業員の名前: " + company.listEmployees[^2].Name);
        Console.WriteLine("ID = 5 の従業員の名前: " + company.listEmployees[^5].Name);
        Console.WriteLine("ID = 8 の従業員の名前: " + company.listEmployees[^8].Name);

        Console.ReadLine();
    }
}

実行結果

ID = 2 の従業員の名前: SSS
ID = 5 の従業員の名前: EEEE
ID = 8 の従業員の名前: GGG
ID = 2, 5, 8 の従業員の名前を変更します
ID = 2 の従業員の名前: 従業員2の名前を変更しました
ID = 5 の従業員の名前: 従業員5の名前を変更しました
ID = 8 の従業員の名前: 従業員8の名前を変更しました
ID = 2 の従業員の名前: 新しい構文で変更した従業員2の名前
ID = 5 の従業員の名前: 新しい構文で変更した従業員5の名前
ID = 8 の従業員の名前: 新しい構文で変更した従業員8の名前

補足

^ 演算子を含む式は System.Index 型として扱われます。配列や List<T> など、インデックスアクセスをサポートするコレクションで利用でき、使用には C# 8.0 以降(.NET Core 3.0 以降)の環境が必要です。

  1. AndroidのTextViewでstartsWith()メソッドを使う方法

    AndroidのTextViewでstartsWith()メソッドを使う方法この記事では、Androidアプリ開発においてstartsWith()メソッドを使用し、入力された文字列が特定の接頭辞(プレフィックス)で始まるかどうかを判定して、その結果をTextViewに表示する方法を解説します。startsWith()はJavaのStringクラスが提供するメソッドの一つで、対象の文字列が引数に指定した文字列で始まっていればtrueを、そうでなければfalseを返します。ユーザー入力のバリデーションや文字列の絞り込み処理など、さまざまな場面で活用できる便利なメソッドです。手順1:新規プロジェクト

  2. Android TextViewでlastIndexOf()を使う方法をわかりやすく解説

    この記事では、Androidアプリ開発においてTextViewと組み合わせてlastIndexOf()メソッドを使用する方法を、具体的なサンプルコードとともに解説します。 lastIndexOf()メソッドとは lastIndexOf()は、JavaのStringクラスが提供するメソッドの一つで、指定した文字列(または文字)が対象の文字列内で最後に出現する位置(インデックス)を返します。先頭から検索するindexOf()とは異なり、末尾側から検索を行うのが特徴です。なお、文字列が見つからなかった場合は「-1」が返されます。 作成するサンプルアプリの概要 今回作成するアプリは、以下のような流