在对数组值使用 get/set 时如何环绕值(使用 `mod`)?

How to wrap around values (using `mod`) when using get/set for array values?

注意:我不想包装数组的索引,事实上,我已经这样做了。我还想在设置数组时 wrap the individual values

我试图让数组值自动环绕而不使用 for 循环来执行此操作,因为我有一个相当大的数组(uint16 限制)。

我尝试使用 get/set 并在高于最大值或低于最小值时使用简单的换行代码。

有什么办法可以做到这一点吗?

我想要的:

MyArray[0] = 5

//MyArray's max is 3, and minimum is 0

结果: MyArray[0] = 2


问题不在于looping around indices,而是将值缩小到一个有限的范围内。

我已经看到了如何实现索引器——比如 Example of Indexer and how to clamp value - Where can I find the "clamp" function in .NET?(有些甚至被建议为重复项)。

这有帮助吗?

using System;
public class ModArray
{
    int [] _array;
    int _mod;
    public ModArray(int size, int mod){
        _array = new int[size];
        _mod = mod;
    }
    public int this[int index]
    {
        get => _array[index];
        set => _array[index] = value % _mod;
    }
}
public class Test
{
    public static void Main()
    {
        var ma = new ModArray(10,3);
        ma[0] = 5;
        Console.WriteLine(ma[0]);
        }
}

如果您可以更改设置值的方式,则只需使用 remainder 运算符(应该类似于 MyArray[0] = 5 % 3)。

但如果不能,则必须将数组包装在 class 中(因为不能子 class 数组),类似于:

class MyArray
{
   // Declare an array to store the data elements.
   private uint16[] arr = new uint16[100];

   // Define the indexer to allow client code to use [] notation.
   public uint16 this[int i]
   {
      get { return arr[i]; }
      set { arr[i] = value % 5; }
   }
}