最近在我的C#课上进行了测验并且出了点问题。我想我有答案,但我想确保我是对的。
第一个:
解释结果
int[] myArray = {5,10,15,20,25};
DoWork(myArray);
void DoWork(int[] theArray)
{
for (int c = 0; c < theArray.Length; c++)
{
theArray[c] = 1;
}
theArray = null;
}
对于这个,我只有一半是正确的。我说循环会将数组中每个元素的值设置为1.所以我的问题是,当你将数组设置为null时会发生什么?
第二个:
解释结果
int[] myArray = {5,10,15,20,25};
DoWork(myArray[1]);
void DoWork(int theItem)
{
theItem = -1;
}
这个我完全错了。纠正是myArray [1] = 10仍然。这是因为它没有通过引用传递吗?这让我很困惑,因为我在第一个上运行了一个小测试程序(没有null部分),并且数组中的所有值都设置为1,但我没有通过引用传递。
答案 0 :(得分:4)
问:将数组设置为null会发生什么?
答:“theArray”(例程内)设置为null。但是“myArray”(例程之外)是 UNCHANGED 。原因是“myArray”是object reference,passed by value为DoWork()。
问:这是因为它没有通过引用传递吗?
答:是的,确切地说。从上面的链接:https://msdn.microsoft.com/en-us/library/9t0za5es.aspx
对方法内发生的参数的任何更改都没有 影响存储在参数变量中的原始数据。
这些链接进一步解释: