我对此感到困惑。
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>
?
答案 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; //##
}