.NETヘルプ C#のインデクサー(開発者向けの仕組み) Curtis Chau 更新日:7月 28, 2025 Download IronPDF NuGet Download テキストの検索と置換 テキストと画像のスタンプ Start Free Trial Copy for LLMs Copy for LLMs Copy page as Markdown for LLMs Open in ChatGPT Ask ChatGPT about this page Open in Gemini Ask Gemini about this page Open in Grok Ask Grok about this page Open in Perplexity Ask Perplexity about this page Share Share on Facebook Share on X (Twitter) Share on LinkedIn Copy URL Email article C#のインデクサーは、クラスや構造体のインスタンスを配列アクセス演算子[]を使ってアクセスできるようにする特別なプロパティです。 インデクサーは「スマート配列」を作成したり、簡略化された構文でデータをカプセル化する際に非常に便利です。 クラスのインスタンスを配列のように使用し、インデックスを介してデータにアクセスできる方法を提供します。 この記事では、実際の例を用いてC#のインデクサーの宣言方法と使用方法を探ります。 また、記事の最後で<IronPDFライブラリについても探ります。 インデクサーの基本構文 インデクサーはクラスまたは構造体内でthisキーワードを使用しているインスタンスメンバーで、インデクサーの宣言が続きます。 また、パラメータの型と戻り値の型を指定します。 インデクサーのインスタンスメンバーの一般的な構文は次のようになります。 public return_type this[parameter_type index] { get { // Code to return data } set { // Code to set data } } public return_type this[parameter_type index] { get { // Code to return data } set { // Code to set data } } Default Public Property Item(ByVal index As parameter_type) As return_type Get ' Code to return data End Get Set(ByVal value As return_type) ' Code to set data End Set End Property $vbLabelText $csharpLabel ここで、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; } } } 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; } } } Friend Class Program Private values(4) As String ' Array with 5 elements Default Public Property Item(ByVal index As Integer) As String Get Return values(index) End Get Set(ByVal value As String) values(index) = value End Set End Property End Class $vbLabelText $csharpLabel 上記のコードでは: 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 } } 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 } } Friend Class Program Shared Sub Main() Dim program As 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 End Sub End Class $vbLabelText $csharpLabel このコードでは、インデクサーが配列の要素にアクセスするためのシンプルな構文を提供していることがわかります。 getおよびsetアクセサーを理解する インデクサー内のgetおよびsetアクセサーは、プロパティの場合と同様にデータを取得および割り当てるためのブロックコードとして機能します。 主な違いは、インデクサーが個々のデータメンバーではなく、データの集合を扱うためにインデックスパラメータを使用することです。 getブロックは指定されたインデックスのデータを返し、setブロックは指定されたインデックスにデータを割り当てます。 もう一つの例を示しますが、理解を深めるためのものです。 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; } } } 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; } } } Friend Class StudentRecords Private studentNames(2) As String Default Public Property Item(ByVal index As Integer) As String Get If index >= 0 AndAlso index < studentNames.Length Then Return studentNames(index) End If Return "Invalid Index" End Get Set(ByVal value As String) If index >= 0 AndAlso index < studentNames.Length Then studentNames(index) = value End If End Set End Property Public ReadOnly Property Length() As Integer Get Return studentNames.Length End Get End Property End Class $vbLabelText $csharpLabel この例では: 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 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]); } } } Friend Class Program Public Shared Sub Main() Dim records As New StudentRecords() ' Set values using indexer records(0) = "John" records(1) = "Jane" records(2) = "Bob" ' Access values using indexer For i As Integer = 0 To records.Length - 1 Console.WriteLine(records(i)) Next i End Sub End Class $vbLabelText $csharpLabel ジェネリックなインデクサーの作成 インデクサーを使用して、複数のデータ型を扱うジェネリックなクラスを作成することもできます。以下は、ジェネリックインデクサーを持つジェネリッククラスの簡単な例です。 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; } } } 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; } } } Friend Class GenericClass(Of T) Private elements(4) As T Default Public Property Item(ByVal index As Integer) As T Get Return elements(index) End Get Set(ByVal value As T) elements(index) = value End Set End Property Public ReadOnly Property Length() As Integer Get Return elements.Length End Get End Property End Class $vbLabelText $csharpLabel このコードでは: GenericClassクラスは、任意のデータ型と一緒に動作することができるインデクサーを定義します。 this[int index]インデクサーによって、型に関係なく配列内の要素にアクセスすることが可能です。 GenericClassを使用して、Mainメソッド内でさまざまなデータ型を使用できるようになります。 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]); } } } 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]); } } } Friend Class Program Public Shared Sub Main() Dim intArray As New GenericClass(Of Integer)() intArray(0) = 10 intArray(1) = 20 Dim stringArray As New GenericClass(Of String)() stringArray(0) = "Hello" stringArray(1) = "World" ' Output the integer array values For i As Integer = 0 To intArray.Length - 1 Console.WriteLine(intArray(i)) Next i ' Output the string array values For i As Integer = 0 To stringArray.Length - 1 Console.WriteLine(stringArray(i)) Next i End Sub End Class $vbLabelText $csharpLabel C#インデクサーで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."); } } 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."); } } Imports IronPdf Imports System Friend Class PdfGenerator Private htmlTemplates(2) As String Default Public Property Item(ByVal index As Integer) As String Get Return htmlTemplates(index) End Get Set(ByVal value As String) htmlTemplates(index) = value End Set End Property Public Sub GeneratePdf(ByVal index As Integer, ByVal outputPath As String) Dim renderer = New ChromePdfRenderer() Dim pdfDocument = renderer.RenderHtmlAsPdf(Me(index)) ' Access HTML string using indexer pdfDocument.SaveAs(outputPath) End Sub End Class Friend Class Program Public Shared Sub Main() Dim pdfGen As 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.") End Sub End Class $vbLabelText $csharpLabel 結論 C#インデクサーは、クラスや構造体を配列のように動作させるのに役立つ機能です。 簡略化された構文と柔軟なデータアクセスを提供することにより、より直感的で読みやすいコードを作成することができます。 文字列、整数、または他の任意のデータ型を扱う際に、インデクサーを使用することでデータ構造をカプセル化し、インデックスを使用して効率的かつクリーンにアクセスすることが可能です。 IronPDFは、PDFを作成、操作およびレンダリングするために必要なすべての機能にアクセスできる無料トライアルを利用し、簡単に使用を開始できます。 ソフトウェアを十分に試してから満足を得られたら、ライセンスは$799から始まります。 よくある質問 C#のインデクサとは何ですか? C#のインデクサは、クラスや構造体のインスタンスを配列アクセス演算子[] を使用してアクセスできる特別な種類のプロパティです。クラスのインスタンスを配列のように使用する方法を提供します。 C#で基本的なインデクサをどのように宣言しますか? C#での基本的なインデクサは、'this'キーワードに続いてインデクサの宣言を書いて宣言します。パラメータの型と戻り値の型を指定する必要があります。例えば:public return_type this[parameter_type index] { get; set; }。 インデクサでの'get'および'set'アクセサの目的は何ですか? 'get'アクセサは、指定されたインデックスのデータを取得するために使用し、'set'アクセサは、指定されたインデックスにデータを割り当てるために使用します。プロパティアクセサと同様に機能しますが、データのコレクションに使用されます。 C#クラスでインデクサの例を提供できますか? もちろんです。プライベートな文字列配列を持つクラス'Program'を考えてみてください。インデクサは、整数インデックスを使用してこの配列にアクセスを許可します。例えば:public string this[int index] { get { return values[index]; } set { values[index] = value; } }。 C#でジェネリックなインデクサをどのように作成しますか? C#でのジェネリックなインデクサは、ジェネリッククラス内で作成できます。例えば、クラスGenericClassには、任意のデータ型を処理できるインデクサが含まれています。インデクサはpublic T this[int index] { get; set; }と宣言されます。 C#でPDF生成を合理化するためにインデクサをどのように使用しますか? IronPDFのようなライブラリを使用すると、クラス内に保存されているHTMLテンプレートをインデクサで管理しアクセスできます。そしてこれらはPDFドキュメントに変換されます。このアプローチは、複数のHTMLソースから動的PDFを生成するプロセスを簡素化します。 インデクサを使用したPDFライブラリの事例を提供できますか? もちろんです。配列にHTMLテンプレートを保存するクラスを作成し、インデクサでこれらのテンプレートにアクセスします。その後、PDFライブラリを使用してこれらのHTML文字列をPDFドキュメントとしてレンダリングします。例えば、PdfGeneratorと呼ばれるクラスがインデクサを使用してHTMLにアクセスし、PDFを生成します。 C#のインデクサを使用する利点は何ですか? C#のインデクサは、コレクション内の要素にアクセスするための簡素な構文を提供し、コードを直感的かつ読みやすくします。クラスや構造体を配列のように振る舞わせることができ、効率的なデータのカプセル化とアクセスが可能になります。 C#で動的データ構造を作成するのにインデクサがどのように役立ちますか? インデクサは、配列のような構文を使用してコレクションにアクセスおよび変更できるため、開発者が動的データ構造を作成することを可能にします。これは、特にデータが柔軟に管理される必要があるシナリオ、例えば動的PDFコンテンツ生成において有用です。 Curtis Chau 今すぐエンジニアリングチームとチャット テクニカルライター Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。 関連する記事 更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む 更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む 更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む C# New GUID(開発者向けの仕組み)C#インデックス付きforeach...
更新日 9月 4, 2025 RandomNumberGenerator C# RandomNumberGenerator C#クラスを使用すると、PDF生成および編集プロジェクトを次のレベルに引き上げることができます 詳しく読む
更新日 9月 4, 2025 C# String Equals(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む
更新日 8月 5, 2025 C# Switch Pattern Matching(開発者向けの仕組み) 強力なPDFライブラリであるIronPDFと組み合わせることで、switchパターンマッチングは、ドキュメント処理のためのよりスマートでクリーンなロジックを構築できます 詳しく読む