IRONSOFTWAREHOME
開発者向けアップデート

C#のインデクサー(開発者向けの仕組み)

Jacob Mellor、Ironチームの最高技術責任者(CTO)
Jacob Mellor
Updated: 2026年7月19日

C# のインデクサーは、クラスまたは構造体のインスタンスを配列アクセスオペレーター [] を使用してアクセスするための特別なタイプのプロパティです。 インデクサーは"スマート配列"を作成したり、簡略化された構文でデータをカプセル化する際に非常に便利です。 クラスのインスタンスを配列のように使用し、インデックスを介してデータにアクセスできる方法を提供します。 この記事では、実際の例を用いてC#のインデクサーの宣言方法と使用方法を探ります。 また、記事の最後でIronPDFライブラリについても探ります。

インデクサーの基本構文

インデクサーは this キーワードを使用してクラスまたは構造体で宣言されたインスタンスメンバーです。 また、パラメータの型と戻り値の型を指定します。 インデクサーのインスタンスメンバーの一般的な構文は次のようになります。

public return_type this[parameter_type index]
{
    get
    {
        // Code to return data
    }
    set
    {
        // Code to set data
    }
}

ここで、return_type は整数値などのインデクサーが返す値の型であり、parameter_type はインデックスの型で、多くの場合 int です。 get アクセサーは指定されたインデックスの値を返し、set ブロックコードアクセサーはそのインデックスに値を割り当てます。

インデクサーの宣言と使用

C#クラス内でのインデクサーの実装の基本的な例を見てみましょう。 文字列の配列をカプセル化するクラス Program を考えてみましょう。

class Program
{
    private string[] values = new string[5]; // Array with 5 elements
    public string this[int index]
    {
        get
        {
            return values[index];
        }
        set
        {
            values[index] = value;
        }
    }
}

上記のコードでは:

  • Program クラスには values という名前の文字列配列が含まれています。
  • string this[int index] はインデクサー宣言であり、int index は配列の要素にアクセスするために使用されるインデックスパラメータ化プロパティです。
  • get アクセサーは指定されたインデックスのインデックス値を返し、set アクセサーはそのインデックスにインデックス値を割り当てます。

これは、Program クラスのインスタンスを作成し、インデクサーを使用してその values 配列にアクセスできることを意味します。

class Program
{
    static void Main()
    {
        Program program = new Program();
        // Set values using indexer
        program[0] = "First";
        program[1] = "Second";
        // Access values using indexer
        Console.WriteLine(program[0]); // Output: First
        Console.WriteLine(program[1]); // Output: Second
    }
}

このコードでは、インデクサーが values 配列にアクセスするための簡単な構文を提供し、配列内の要素にアクセスするのと同様であることがわかります。

get および set アクセサーを理解する

インデクサー内の get および set アクセサーは、プロパティと同様にデータの取得と割り当てを可能にするブロックコードのようなものです。 主な違いは、インデクサーが個々のデータメンバーではなく、データの集合を扱うためにインデックスパラメータを使用することです。

get ブロックは指定されたインデックスのデータを返す役割を担い、set ブロックはデータを指定されたインデックスに割り当てます。 Here's another example to solidify your understanding:

class StudentRecords
{
    private string[] studentNames = new string[3];
    public string this[int index]
    {
        get
        {
            if (index >= 0 && index < studentNames.Length)
            {
                return studentNames[index];
            }
            return "Invalid Index";
        }
        set
        {
            if (index >= 0 && index < studentNames.Length)
            {
                studentNames[index] = value;
            }
        }
    }
    public int Length
    {
        get { return studentNames.Length; }
    }
}

この例では:

  • StudentRecords クラスには、学生の名前を保持するプライベートな string[] studentNames 配列があります。
  • インデクサーは、値を設定または取得する前にインデックスが配列の範囲内にあることを確認します。
  • int 型の Length プロパティは、配列の長さへのアクセスを提供します。

このクラスを Main メソッドで次のように使用できます:

class Program
{
    public static void Main()
    {
        StudentRecords records = new StudentRecords();
        // Set values using indexer
        records[0] = "John";
        records[1] = "Jane";
        records[2] = "Bob";
        // Access values using indexer
        for (int i = 0; i < records.Length; i++)
        {
            Console.WriteLine(records[i]);
        }
    }
}

ジェネリックなインデクサーの作成

インデクサーを使用して、複数のデータ型を扱うジェネリックなクラスを作成することもできます。以下は、ジェネリックインデクサーを持つジェネリッククラスの簡単な例です。

class GenericClass<t>
{
    private T[] elements = new T[5];
    public T this[int index]
    {
        get
        {
            return elements[index];
        }
        set
        {
            elements[index] = value;
        }
    }
    public int Length
    {
        get { return elements.Length; }
    }
}

このコードでは:

  • GenericClassクラスは、任意のデータ型と一緒に動作することができるインデクサーを定義します。
  • this[int index] インデクサーによって、型に関係なく配列内の要素にアクセスすることができます。

さまざまなデータ型を Main メソッドで GenericClass を使用できます:

class Program
{
    public static void Main()
    {
        GenericClass<int> intArray = new GenericClass<int>();
        intArray[0] = 10;
        intArray[1] = 20;

        GenericClass<string> stringArray = new GenericClass<string>();
        stringArray[0] = "Hello";
        stringArray[1] = "World";

        // Output the integer array values
        for (int i = 0; i < intArray.Length; i++)
        {
            Console.WriteLine(intArray[i]);
        }

        // Output the string array values
        for (int i = 0; i < stringArray.Length; i++)
        {
            Console.WriteLine(stringArray[i]);
        }
    }
}

IronPDFとC#インデクサーの使用

C# のインデクサー(開発者向けの動作理解): 図1 - IronPDF

IronPDFは、.NETアプリケーションでのPDFの生成、編集、および変換を目的としたC#ライブラリです。 開発者がHTML からPDFを作成したり、PDFファイルを操作したり、マージ、印刷、署名の追加など高度な機能をプログラムで処理したりするための手続きを簡素化します。

インデクサーを利用するC#プログラム内でIronPDFを活用して、動的にPDFコンテンツを生成および管理することができます。 例えば、HTML文字列を保持するクラスがあり、インデクサーを使用して各HTMLエントリのPDFを生成したい場合、このようになります。 このアプローチにより、PDFの生成が合理化され、コードの整理と直感的な操作が可能になります。

using IronPdf;
using System;

class PdfGenerator
{
    private string[] htmlTemplates = new string[3];
    public string this[int index]
    {
        get { return htmlTemplates[index]; }
        set { htmlTemplates[index] = value; }
    }

    public void GeneratePdf(int index, string outputPath)
    {
        var renderer = new ChromePdfRenderer();
        var pdfDocument = renderer.RenderHtmlAsPdf(this[index]); // Access HTML string using indexer
        pdfDocument.SaveAs(outputPath);
    }
}

class Program
{
    public static void Main()
    {
        PdfGenerator pdfGen = new PdfGenerator();
        // Populate HTML templates
        pdfGen[0] = "<h1>First Document</h1><p>This is the first PDF.</p>";
        pdfGen[1] = "<h1>Second Document</h1><p>This is the second PDF.</p>";
        pdfGen[2] = "<h1>Third Document</h1><p>This is the third PDF.</p>";

        // Generate PDFs using the indexer
        pdfGen.GeneratePdf(0, "first.pdf");
        pdfGen.GeneratePdf(1, "second.pdf");
        pdfGen.GeneratePdf(2, "third.pdf");

        Console.WriteLine("PDFs generated successfully.");
    }
}

C# のインデクサー(開発者向けの動作理解): 図2 - コンソール出力

結論

C#インデクサーは、クラスや構造体を配列のように動作させるのに役立つ機能です。 簡略化された構文と柔軟なデータアクセスを提供することにより、より直感的で読みやすいコードを作成することができます。 文字列、整数、または他の任意のデータ型を扱う際に、インデクサーを使用することでデータ構造をカプセル化し、インデックスを使用して効率的かつクリーンにアクセスすることが可能です。

IronPDFは、PDFを作成、操作およびレンダリングするために必要なすべての機能にアクセスできる無料トライアルを利用し、簡単に使用を開始できます。 ソフトウェアをゆっくり探索することができ、満足した場合には $999 からライセンスを利用できます。

Jacob Mellor、Ironチームの最高技術責任者(CTO)
最高技術責任者(CTO)

ジェイコブ・メラーはIron Softwareの最高技術責任者(CTO)であり、C# PDFテクノロジーを開拓する先見的なエンジニアです。Iron Softwareのコアコードベースを支えるオリジナル開発者として、彼は創業以来、会社の製品アーキテクチャを形成し、CEOのCameron Rimingtonとともに、会社をNASA、Tesla、および世界的な政府機関にサービスを提供する50人以上の会社に変えました。1999年にロンドンで最初のソフトウェアビジネスを開業し、2005年に最初 for .NETコンポーネントを作成した後、Microsoftのエコシステム全体で複雑な問題を解決することを専門としました。

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

OR
bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried Iron Suite
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。
PDF用C# NuGetライブラリ
NuGetでインストール

バージョン: 2026.9

PM > Install-Package IronPdf
nuget.org/packages/IronPdf/
  1. ソリューションエクスプローラーで参照を右クリックし、NuGetパッケージを管理を選択
  2. ブラウズを選択し、"IronPDF"を検索
  3. パッケージを選択してインストール
C# PDF DLL
DLLをダウンロード

バージョン: 2026.9

またはここからWindowsインストーラーをダウンロードする。

  1. IronPDFを~/Libsなどの場所に解凍し、ソリューションディレクトリ内に配置する
  2. Visual Studioソリューションエクスプローラーで参照を右クリックし、"IronPDF.dll"をブラウズして選択

ライセンスは$999から