C# 是否可以更改数组中变量的值?

C# 是否可以更改数组中变量的值?,c#,arrays,C#,Arrays,我正在创建一个程序,需要在其中更改存储在数组中的整数的值。下面是我所说的一个例子: int num = 0; int[] nums = new int[] {num}; Console.WriteLine(nums[0]); nums[0] = 1; Console.WriteLine(nums[0]); Console.WriteLine(num); 此时,程序输出0、1、0。是否有一种方法可以通过仅使用数组来修改num的值,从而使其输出0、1、1?您的错误似乎在于认为变量num和nu

我正在创建一个程序,需要在其中更改存储在数组中的整数的值。下面是我所说的一个例子:

int num = 0;
int[] nums = new int[] {num};

Console.WriteLine(nums[0]);

nums[0] = 1;

Console.WriteLine(nums[0]);
Console.WriteLine(num);

此时,程序输出0、1、0。是否有一种方法可以通过仅使用数组来修改num的值,从而使其输出0、1、1?

您的错误似乎在于认为变量
num
nums
之间存在引用

int[] nums = new int[] {num} 
只需获取值0并将其分配给数组的第一个元素。以后改变其中一个不会改变另一个
int
是一种值类型,这就是为什么不可能这样做的原因。您应该仔细阅读值和引用类型

但是,你可以尝试这样的方法,因为,就像我说的,你需要两个对同一事物的引用,才能改变一个事物,而改变另一个事物

class IntContainer { public int val;}            //class with int field 
IntContainer num = new IntContainer {val = 1};   //original set to 1
IntContainer[] nums = new[] {num};
nums[0].val = 200;                               //setting the array element
Console.WriteLine(num.val);                      //200 not 1 

这是因为它更改了基础引用所指向的值。

您的错误似乎在于认为变量
num
nums
之间存在引用

int[] nums = new int[] {num} 
只需获取值0并将其分配给数组的第一个元素。以后改变其中一个不会改变另一个
int
是一种值类型,这就是为什么不可能这样做的原因。您应该仔细阅读值和引用类型

但是,你可以尝试这样的方法,因为,就像我说的,你需要两个对同一事物的引用,才能改变一个事物,而改变另一个事物

class IntContainer { public int val;}            //class with int field 
IntContainer num = new IntContainer {val = 1};   //original set to 1
IntContainer[] nums = new[] {num};
nums[0].val = 200;                               //setting the array element
Console.WriteLine(num.val);                      //200 not 1 

这之所以有效,是因为它更改了基础引用所指向的值。

您可能会混淆变量的名称,或者您不理解C#中引用类型和值类型之间的区别

示例中的num变量是值类型。而int[]nums是一种引用类型

分配值类型时,将值从一个变量复制到另一个变量。指定引用类型时,就是将对象的引用从变量指定给另一个变量。在这种情况下,当两个变量指向同一对象的引用,并且您在该对象中进行了更改时,您将在这两个对象中看到该更改

这里有另一个例子来说明这一点

int valueA = 1;       // Copying value 1 to valueA
int valueB = valueA;  // Copying valueA to valueB

int[] arrayReferenceA = new[] { valueA };  // Creates a reference of an array of value types
int[] arrayReferenceB = arrayReferenceA;   // Copies a reference to the array

valueB = 2;   // Copying value 2 to valueB

arrayReferenceB[0] = valueB; // Copying valueB to the first element of an array of values referenced by arrayReferenceB
Console.WriteLine(valueA);
Console.WriteLine(valueB);
Console.WriteLine(arrayReferenceA[0]);
Console.WriteLine(arrayReferenceB[0]);
其输出为

12


您要么是混淆了变量的名称,要么是不理解C#中引用类型和值类型之间的区别

示例中的num变量是值类型。而int[]nums是一种引用类型

分配值类型时,将值从一个变量复制到另一个变量。指定引用类型时,就是将对象的引用从变量指定给另一个变量。在这种情况下,当两个变量指向同一对象的引用,并且您在该对象中进行了更改时,您将在这两个对象中看到该更改

这里有另一个例子来说明这一点

int valueA = 1;       // Copying value 1 to valueA
int valueB = valueA;  // Copying valueA to valueB

int[] arrayReferenceA = new[] { valueA };  // Creates a reference of an array of value types
int[] arrayReferenceB = arrayReferenceA;   // Copies a reference to the array

valueB = 2;   // Copying value 2 to valueB

arrayReferenceB[0] = valueB; // Copying valueB to the first element of an array of values referenced by arrayReferenceB
Console.WriteLine(valueA);
Console.WriteLine(valueB);
Console.WriteLine(arrayReferenceA[0]);
Console.WriteLine(arrayReferenceB[0]);
其输出为

12


我想你可以做
num=1-num;控制台写入线(num)nums[0]=1后,代码>三次,但我不知道您真正想问的是什么。我想问的是,您是否可以在不使用变量名称并使用数组的情况下更改变量的值。如果不编写代码,则无法使用另一个变量(甚至数组变量)修改一个变量的值。计算机完全按照你的要求去做,不多不少。您必须重新分配
num
以更改其值。我想您可以执行
num=1-num;控制台写入线(num)nums[0]=1后,代码>三次,但我不知道您真正想问的是什么。我想问的是,您是否可以在不使用变量名称并使用数组的情况下更改变量的值。如果不编写代码,则无法使用另一个变量(甚至数组变量)修改一个变量的值。计算机完全按照你的要求去做,不多不少。您必须重新分配
num
以更改其值。可能存在重复的