C#中填充矩形数组的扩展方法

And*_*hin 7 .net c# arrays

我想写填充多维矩形数组的扩展方法.我知道如何为具有固定数量测量的阵列做到这一点:

public static void Fill<T>(this T[] source, T value)
{
    for (int i = 0; i < source.Length; i++)
        source[i] = value;
}
public static void Fill<T>(this T[,] source, T value)
{
    for (int i = 0; i < source.GetLength(0); i++)
        for (int j = 0; j < source.GetLength(1); j++)
            source[i, j] = value;
}
public static void Fill<T>(this T[,,] source, T value)
{
    for (int i = 0; i < source.GetLength(0); i++)
        for (int j = 0; j < source.GetLength(1); j++)
            for (int k = 0; k < source.GetLength(2); k++)
                source[i, j, k] = value;
}
Run Code Online (Sandbox Code Playgroud)

我可以为所有多维矩形数组编写一个fill方法吗?

Jak*_*son 5

您可以将固定维度参数更改为Array参数,以便可以将扩展名放在任何Array上.然后我使用递归迭代数组的每个位置.

public static void Fill<T>(this Array source, T value)
{
    Fill(0, source, new long[source.Rank], value);
}

static void Fill<T>(int dimension, Array array, long[] indexes, T value)
{
    var lowerBound = array.GetLowerBound(dimension);
    var upperBound = array.GetUpperBound(dimension);
    for (int i = lowerBound; i <= upperBound; i++)
    {
        indexes[dimension] = i;
        if (dimension < array.Rank - 1)
        {
            Fill(dimension + 1, array, indexes, value);
        }
        else
        {
            array.SetValue(value, indexes);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)