您可以使用数组访问C#多维数组索引器吗? - c#

我试图找出是否有可能将一个对象作为多维数组的索引值传递。

var nums = new int[3,3];
// of course you can index by literal integers
nums[0, 2] = 99;
// but can you index by an array?  This does not work
var index = new [] {0, 2};
nums[index] = 100;

// I can use GetValue with the int array, but this returns an object not an int
nums.GetValue(new [] {0, 2});

那么,有谁知道我应该将哪种类型传递给多维数组索引器以满足编译器的需求?

参考方案

简短的答案是“不”,您不能本机执行此操作。

稍长一点的答案是肯定的,您可以使用扩展方法来实现这种行为。您可以添加适用于所有数组的扩展方法,如下所示:

public static class ArrayExtender
{
    public static T GetValue<T>(this T[,] array, params int[] indices)
    {
        return (T)array.GetValue(indices);
    }

    public static void SetValue<T>(this T[,] array, T value, params int[] indices)
    {
        array.SetValue(value, indices);
    }

    public static T ExchangeValue<T>(this T[,] array, T value, params int[] indices)
    {
        var previousValue = GetValue(array, indices);
        array.SetValue(value, indices);

        return previousValue;
    }
}

这样,您可以使用:

        var matrix = new int[3, 3];
        matrix[0, 2] = 99;

        var oldValue = matrix.GetValue(0, 2);
        matrix.SetValue(100, 0, 2);
        var newValue = matrix.GetValue(0, 2);

        Console.WriteLine("Old Value = {0}", oldValue);
        Console.WriteLine("New Value = {0}", newValue);

输出:

Old Value = 99
New Value = 100

在大多数情况下,对于为什么需要此功能有一个面向对象的答案,可以创建适当的自定义类来简化此操作。例如,我可能有一个棋盘,可以使用辅助方法创建几个类:

class GameBoard
{
  public GamePiece GetPieceAtLocation(Point location) { ... }
}

array_udiff返回不同的结果 - php

我有这段代码来获取两个对象数组之间的区别:$diff = array_udiff($a, $b, function($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } ); $ a是[ { "id": "7", "attribute":…

我如何在php数组中传递空键 - php

如果没有这样的键,如何获取数组内容$products[0] 这将使我部分到达那里,但我该如何过去[]( [0] => Array ( [] => Array ( [0] => Array ( [product_name] => stuff i need to get to ) 参考方案 真奇怪你可以试试$products[0][�…

LeetCode题解912.sort-an-array

题目地址 https://leetcode.com/problems/sort-an-array/ 题目描述 Given an array of integers nums, sort the array in ascending order. Example 1: Input: [5,2,3,1] Output: [1,2,3,5] Example 2: …

LeetCode题解寻找数组中的最大值和最小值

我们经常碰到一个问题,就是需要在一个数组中求最大值或者最小值。如果我们要同时取出最大最小值呢?常见的做法是扫描一次数字,然后分别和当然最大值和当前最小值进行比对,因此总的比较次数是2N,其中N为数组的长度。那么有没有办法减少比较次数呢?题解:```jsfunction quickSort(array, lowIndex, highIndex) { if (l…

隐式定义时,多维数组是否填充有空值? - c#

我有:public static BlockQuadrant[] EditModeBlocks = new BlockQuadrant[9];但是当我尝试使用它们时,我得到了一个空值异常,而且显然所有的值都等于空值。我以为这是我的BlockQuadrant类中的一个值,但是我在构造函数中定义了所有内容。如果是这种情况,是否有办法让它用BlockQuadran…