我知道有非常相似的问题,但我需要知道在这个具体的案例中发生了什么。我编写了一个函数来沿特定维度反转多维数组的项。为此,我将多维数组转换为锯齿数组,然后递归地找到执行反转的数组维度。
public static void Reverse(this Array array, int dimension, int start, int end)
{
object[] jag = array.ToJaggedArray();
if (!jag.ReverseAux(0, dimension, start, end))
throw new ArgumentOutOfRangeException("dimension", dimension, "Dimension must be nonnegative and less than array dimensions number.");
array = jag;
}
现在我的问题是,当我运行这个方法时,我的输入数组并没有被修改。数组不应该通过引用传递吗?当我分配
array = jag
为什么它在方法内部而不是外部被正确分配?
// create 2D array of strings
string[,] ar = {{"00", "01", "02"},
{"10", "11", "12"},
{"20", "21", "22"}};
// reverse the first dimension (rows)
ar.Reverse(0, 0, 2);
// show the result
MessageBox.Show(ar.ToString(null, null));
输出是
{{00, 01, 02}, {10, 11, 12}, {20, 21, 22}}
这正是原始数组。如果我签入输出
Reverse
方法
public static void Reverse(this Array array, int dimension, int start, int end)
{
//...
array = jag;
System.Windows.Forms.MessageBox.Show(array.ToString(null, null));
}
这显示了正确的反向数组
{{20, 21, 22}, {10, 11, 12}, {00, 01, 02}}
.
ref
数组参数的关键字?如果是,是否可以继续使用此方法作为
Array