質問: new string[3] { "aaavvvvvvvvvvv", "bb", "ccc" }; array_type(str,str2); ```
回答: > > []インデックスで操作するためのインターフェイスが知りたい > > > `IList` インターフェイスにはインデクサが定義さています。 配列はこのインターフェイスを実装しているので適用可能です。 > > == や> < などを使って比較したりしたいのですがどうすればいいのでしょうか? > > > 演算子を使用することは基本的にはできません。 一般的には `Equals` や `CompareTo` メソッドを使用して比較演算を行います。 > > 参照と値型ではジェネリックでも書き分けるしかないのでしょうか? > > > 必要がなければ書き分ける必要はありません。 ちなみに参照型に制約するには `class`, 値型に制約するには `struct` を型制約に宣言します。 以下、実装サンプルです。 `ArrayTypeB`のほうが配列要素の比較等が可能なためおすすめです。 ``` static void ArrayTypeA(T idx) where T : IList { for (int i = 0; i < idx.Count; ++i) { Debug.WriteLine($"A. idx[{i}] = " + idx[i]); } } static void ArrayTypeB(IList idx) where T : IEquatable, IComparable { for (int i = 0; i < idx.Count; ++i) { Debug.WriteLine($"B: idx[{i}] = " + idx[i]); } Debug.WriteLine("idx[0] equals idx[1]: " + idx[0].Equals(idx[1])); Debug.WriteLine("idx[0] compareTo idx[1]:" + idx[0].CompareTo(idx[1])); } public void Test() { var strings = new string[] { "A1", "A2" }; ArrayTypeA(strings); ArrayTypeB(strings); var numbers = new int[] { 1234, 1234 }; ArrayTypeA(numbers); ArrayTypeB(numbers); } ```