考虑一类嵌套数组,每个元素可以是数组或数字:
[[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# 中没有 Either 类型)