ネストされた配列のクラスを考えてみましょう。各要素は配列または数値のいずれかになります。
[[1, 2, [3, 4, [5]], [6, 7]], 8]
[] 演算子を実装しようとする私の試みは次のとおりです。
class MyArray {
List<MyArray> elements;
int value;
public object this[int index] {
get {
if (elements.Count > 0) {
return elements;
} else {
return value;
}
}
}
}
したがって、目標は次のように使用することです。
MyArray arr = new MyArray();
... do something with the array here ...
int num = arr[3][5][1];
「リーフ」ではなく「ブランチ」にアクセスする場合 (たとえば、arr[3][5][1] には複数の要素があります)、0、無限大、または任意の整数を返します。
ただし、明らかに、演算子の結果は MyArray インスタンスではなくオブジェクトであるため、このようなネストされた演算子は私の場合には機能しません。
現時点では、唯一の解決策があります。変換演算子を int に定義し、[] 演算子が常に要素のみを返すようにします (ここで例外が発生しない場合、これは MyArray になります)。しかし、他の方法はありますか?たぶん、IList インターフェイスのようなものを使用すると役立つでしょうか? または、何らかの方法でメソッドに対して複数の可能な戻り値の型を定義する方法があるでしょうか? (しかし、これまでグーグルで検索したところ、それは不可能であり、C#にはどちらの型もありません)