为什么数组不是null?

时间:2016-03-03 04:39:53

标签: c# arrays arr

我对此感到困惑。

private void button1_Click(object sender, EventArgs e)
{
    int i = 1;
    int[] p=new int[4];
    p[0] = 25;
    method(p);
    string o = p[0].ToString();
}
private void method(int[] k)
{
    k[0] = 34;
    k = null; //##
}

场景1:如果我删除了k=null,那么我的p[0]就会变成34,而k=null已在'方法'中修改功能。数组是引用类型,所以没什么好奇的。

场景2:使用p[0],我的34仍然会返回null而不是34。为什么会这样?在这里我将整个数组作为null,但第一个元素仍然带有AsyncTask<ImageView, Void, ImageView>

2 个答案:

答案 0 :(得分:1)

您正在引用数组null,而不是将数组设为null。如果您将参数更改为ref int[] k并将其称为method(ref p),那么它的行为将与您期望的一样。

例如:

private void button1_Click(object sender, EventArgs e)
{
    int i = 1;
    int[] p=new int[4];
    p[0] = 25;
    method(ref p);
    string o = p[0].ToString();
}
private void method(ref int[] k)
{
    k[0] = 34;
    k = null; //##
}

答案 1 :(得分:1)

因为你所做的是将数组的引用传递给method,它会创建一个new引用int[] k,它引用与调用者变量相同的项目p确实如此,但不是 p

成为null的是new中的int[] k method,而不是来自来电者的变量p

int i = 1;
int[] p=new int[4]; //p is here
p[0] = 25;
method(p);
string o = p[0].ToString();

//this is k, it is a new int[] reffering to the same item as p, but not p
private void method(int[] k) 
{
    k[0] = 34;
    k = null; //##
}