我想知道为什么它不能按照我期望的方式工作。这是“运送就是选择”的问题,还是有很好的实际原因,我所期望的行为是有问题的。
考虑以下变量定义:
int[,] a
此功能签名
(int, int) FindIndex(int[,] a)
鉴于这些,我希望它能起作用:
int index = a[FindIndex(a)];
但是没有,它给出了:
CS0022 []中错误的索引数;预期2
我没有检查规格,但是我确定这与规格一致,因此我不怀疑实现是否正确,确实如此。我想知道的是,有什么实际的原因和/或考虑因素导致对此不予支持?
答案 0 :(得分:1)
完全愚蠢的类将元组作为索引器
public class MyFunkyArray<T> : IEnumerable<T>
{
public MyFunkyArray() { }
public MyFunkyArray(T[,] buffer) => Buffer = buffer;
public T[,] Buffer { get; set; }
public T this[(int, int) tuple]
{
get => Buffer[tuple.Item1, tuple.Item2];
set => Buffer[tuple.Item1, tuple.Item2] = value;
}
public IEnumerator<T> GetEnumerator() => ToEnumerable(Buffer).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
public IEnumerable<T> ToEnumerable(Array target) => target.Cast<T>();
}
用法
var array = new MyFunkyArray<int>(new int[2, 2]);
var tuple = (1, 1);
array[tuple] = 3;
foreach (var val in array)
Console.WriteLine(val);
输出
0
0
0
3
注意 :这仅是出于学术目的,价值有限
其他资源
Indexers (C# Programming Guide)
索引器允许对类或结构的实例进行索引,就像 数组。无需显式设置或检索索引值 指定类型或实例成员。索引器类似于属性 除了访问器带有参数之外。