せっかくC#を使っているので便利で簡単に使えるインターフェースを使わないのは勿体無いと思うのです。
IReadOnlyList
IReadOnlyListのメリット
- 不変性の保証:
- IReadOnlyList
は読み取り専用のリストを表し、リストの要素を変更する操作(追加、削除、更新)ができません。これにより、メソッドがリストの内容を変更しないことを保証できます。 - 例:
- IReadOnlyList
public void ProcessData(IReadOnlyList<int> data) { // data.Add(1); // コンパイルエラー: IReadOnlyListは変更できません foreach (var item in data) { Console.WriteLine(item); } }
- インターフェースの柔軟性:
- IReadOnlyList
はインターフェースであり、 List<T>、T[]
(配列)、および他の読み取り専用のリスト型(例えばReadOnlyCollection<T>
)など、さまざまなコレクション型を受け入れることができます。これにより、メソッドの柔軟性が向上します。 - 例:
- IReadOnlyList
public void ProcessData(IReadOnlyList<int> data) { foreach (var item in data) { Console.WriteLine(item); } } var list = new List<int> { 1, 2, 3 }; var array = new int[] { 4, 5, 6 }; ProcessData(list); // Listを渡す ProcessData(array); // Arrayを渡す
- 設計の意図の明確化:
- メソッドがリストの内容を変更する必要がない場合、
IReadOnlyList<T>
を使用することで、設計の意図を明確に伝えることができます。これにより、コードの可読性とメンテナンス性が向上します。 - 例:
- メソッドがリストの内容を変更する必要がない場合、
public void DisplayItems(IReadOnlyList<string> items) { foreach (var item in items) { Console.WriteLine(item); } }
- リストのインデックスアクセス:
- IReadOnlyList
はリストのインデックスアクセスをサポートしており、インデックスを使用して要素にアクセスできます。これにより、配列やリストと同様に効率的に要素にアクセスできます。 - 例:
- IReadOnlyList
public void PrintItemAtIndex(IReadOnlyList<string> items, int index) { if (index >= 0 && index < items.Count) { Console.WriteLine(items[index]); } }
IReadOnlyListの使用例
以下に、IReadOnlyList<T>
を使用した具体的なメソッドの例を示します。
using System; using System.Collections.Generic; public class Example { public void DisplayItems(IReadOnlyList<string> items) { foreach (var item in items) { Console.WriteLine(item); } } public void PrintItemAtIndex(IReadOnlyList<string> items, int index) { if (index >= 0 && index < items.Count) { Console.WriteLine(items[index]); } } public static void Main() { var list = new List<string> { "apple", "banana", "cherry" }; var array = new string[] { "dog", "elephant", "fox" }; var example = new Example(); example.DisplayItems(list); // Listを渡す example.DisplayItems(array); // Arrayを渡す example.PrintItemAtIndex(list, 1); // banana example.PrintItemAtIndex(array, 2); // fox } }
まとめ
- インターフェースの柔軟性: IReadOnlyList
はさまざまなコレクション型を受け入れることができ、メソッドの柔軟性が向上します。これにより、特定のコレクション型に依存しない汎用的なメソッドを作成できます。 - 設計の意図の明確化: IReadOnlyList
を使用することで、メソッドがリストの内容を変更しないことを明確に示すことができ、コードの可読性とメンテナンス性が向上します。 - リストのインデックスアクセス: IReadOnlyList
はインデックスを使用して要素にアクセスできるため、配列やリストと同様に効率的に要素にアクセスできます。