如何解决如何在 C# 中对多维数组使用 from end 索引语法?
我想对二维数组使用 C# 8 from end 索引语法。如何做到这一点,或者它不受支持?我有一个数组索引的外部源,并以下列方式访问它:
(int,int)[] indexes = new (int,int)[1] { (0,1) } /* GetIndexes() */;
int[,] array = new int[1,1] /* GetArray() */;
foreach((int i,int j) in indexes)
{
_ = array[i,array.GetLength(1) - j]; // Current
_ = array[i,^j]; // What I have in mind
}
但我的想法给了我编译器错误“CS0029:无法隐式将类型'system.index'转换为'int'。”
这与数组切片语法有关,因为它们都是数组操作并且以相同的语言版本发布。然而,它们仍然是不同的操作,一个人的存在从根本上不依赖于另一个人。
谢谢
解决方法
根据索引和范围语法的 proposal,该语言只会在以下情况下自动添加采用 Index
的索引器:
- 类型是可数的。
- 该类型有一个可访问的实例索引器,它以单个
int
作为参数。 - 该类型没有将
Index
作为第一个参数的可访问实例索引器。Index
必须是唯一的参数 或者其余参数必须是可选的。
二维数组不满足这些要求中的第二个,即使满足,以 one Index
作为参数的索引器也不是您想要的。搜索提案,似乎他们并没有考虑那么多多维数组。
现在,您可以在需要 2 T[,]
秒的 Index
上编写自己的扩展方法:
static class ArrayExtensions {
public static T Get<T>(this T[,] arr,Index x,Index y)
=> arr[
x.IsFromEnd ? arr.GetLength(0) - x.Value : x.Value,y.IsFromEnd ? arr.GetLength(1) - y.Value : y.Value
];
}
请注意,如果您有一个锯齿状数组 (int[][]
),索引语法确实有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。