微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 C# 中对多维数组使用 from end 索引语法?

如何解决如何在 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 举报,一经查实,本站将立刻删除。