在微软网站的例子中,有以下代码:
class TestRef
{
static void FillArray(ref int[] arr)
{
// Create the array on demand:
if (arr == null)
{
arr = new int[10];
}
// Fill the array:
arr[0] = 1111;
arr[4] = 5555;
}
}
如果我删除if (arr == null)
行,则错误输出将为0 0 0 0 0
而不是1 2 3 4 5
。为什么呢?
答案 0 :(得分:4)
这是因为您正在经过ref
这意味着您正在main
方法中更改该变量的指针。
您要将其分配给新的int[]
,其中填充的默认值int
为0
答案 1 :(得分:0)
它的发生是因为当你把你的代码放在原来它意味着你将intArray传递给方法但是当你在这种情况下你提到删除行时,new int []被赋给变量,它将填充默认值0在你的阵列中。
此行arr = new int[10];
在删除条件时分配新的int []。
如官方网站所述: -
作为结果,可以改变数组类型的ref参数 呼叫。例如,可以为数组分配空值或者可以 初始化为不同的数组。
答案 2 :(得分:0)
在FillArray
函数中,您通过引用传递数组
但是当你删除if
块时
你重新初始化数组
初始化值类型数组时,元素采用值类型的默认值
在这种情况下,int
具有默认值0
您需要了解传递值与传递C#中的引用 http://www.programminginterviews.info/2011/05/pass-by-value-versus-reference-in-c.html
也是值类型vs ref类型
http://www.albahari.com/valuevsreftypes.aspx