Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#清除数组,但不使用列表的0替代项填充。清除(将大小恢复为0)_C#_Arrays - Fatal编程技术网

C#清除数组,但不使用列表的0替代项填充。清除(将大小恢复为0)

C#清除数组,但不使用列表的0替代项填充。清除(将大小恢复为0),c#,arrays,C#,Arrays,是否可以完全删除C#中的数组,但不使用0填充它: for(int i=0;i<a.Length;i++) { a[i]=0; } for(int i=0;i取决于数组的元素是Value类型还是Reference类型 在您的情况下,它是值类型,因此您必须在其中包含一些值。您不能将null赋值给它 因为值类型对象有一些默认值。这取决于数组的元素是value类型还是Reference类型 在您的情况下,它是值类型,因此您必须在其中包含一些值。您不能将null赋值给它 因为值类型对象有一些默认值

是否可以完全删除C#中的数组,但不使用0填充它:

for(int i=0;i<a.Length;i++)
{
a[i]=0;
}

for(int i=0;i取决于数组的元素是
Value
类型还是
Reference
类型

在您的情况下,它是值类型,因此您必须在其中包含一些值。您不能将
null
赋值给它


因为值类型对象有一些默认值。

这取决于数组的元素是
value
类型还是
Reference
类型

在您的情况下,它是值类型,因此您必须在其中包含一些值。您不能将
null
赋值给它

因为值类型对象有一些默认值。

C#中的数组是固定长度的;您不能更改数组的大小。您可以分配不同大小的数组并复制元素以模拟调整大小(这正是
列表
内部所做的),但您不能“清除数组”在这个意义上,你把它减少到零元素

我尝试了
a=newint[15];
但是前面的值仍然存在

前面的值不可能仍然存在,因为这将分配一个包含15个元素的新
int
数组,其中所有元素都为零

请注意,这不会改变
a
引用的数组;相反,它会创建一个新数组并将对该数组的引用存储在
a
中。因此,如果从另一个数组变量初始化
a
,则它们会引用同一个数组,但将新数组分配给
a
后,另一个变量将继续指向旧数组。也许这就是“以前的值”的来源

var a = new int[] { 1, 2, 3 };
var b = a;

// a and b now reference the same array.

a = new int[] { 4, 5, 6 };

// a is now {4,5,6} but b remains {1,2,3}
C#中的数组是固定长度的;您不能更改数组的大小。您可以分配不同大小的数组并复制元素以模拟调整大小(这正是
List
内部所做的),但您不能“清除数组”,即将其减少为零个元素

我尝试了
a=newint[15];
但是前面的值仍然存在

前面的值不可能仍然存在,因为这将分配一个包含15个元素的新
int
数组,其中所有元素都为零

请注意,这不会改变
a
引用的数组;相反,它会创建一个新数组并将对该数组的引用存储在
a
中。因此,如果从另一个数组变量初始化
a
,则它们会引用同一个数组,但将新数组分配给
a
后,另一个变量将继续指向旧数组。也许这就是“以前的值”的来源

var a = new int[] { 1, 2, 3 };
var b = a;

// a and b now reference the same array.

a = new int[] { 4, 5, 6 };

// a is now {4,5,6} but b remains {1,2,3}

正如其他人所说,这取决于您要放入数组中的类型语义

值类型(如
int
bool
、和
float
)是……嗯,值。它们表示数量、有形的东西和状态。因此,它们需要在编译时已知,并具有默认值

相比之下,引用类型(基本上是每个类)本身并不持有任何值,而是通过引用将数据“分组”在一起。引用类型将指向其他引用类型,或最终指向一个值类型(持有实际数据)

这个区别对于您的问题很重要。
List
是一个动态大小的集合,它可以在不创建新对象的情况下增长或收缩,因为它是如何实现的。列表中的每个元素都指向下一个元素,因此它的大小无法提前知道

数组是声明为特定大小的固定大小集合。数组类型决定系统保留的内存量。例如,100个元素的
byte[]
将比
Int64[]占用更少的内存
由100个元素组成的数组。因此,系统需要提前知道总共要保留多少字节,这意味着它需要一个默认值来“回退”以满足编译时检查。如果
T[]
是引用类型/类,则这是
null
。对于值类型,这通常是
0
(或
default(T))


如果要删除数组的所有值,类似于
List.Clear()
的工作方式,可以执行
int[]a=new int[0];
,但请注意,您正在创建一个全新的数组并重新分配它们的内存(因此关键字
new
)。其他对象将需要引用此新数组。根据设计,您不能简单地调整数组的大小。列表是一个可变集合,支持更改元素的数量。您也可以尝试
int[]a=null
,但这会将其设置为完全没有对象,这又是另一回事。

正如其他人所说,它取决于您放入数组中的类型语义

值类型(如
int
bool
、和
float
)是……嗯,值。它们表示数量、有形的东西和状态。因此,它们需要在编译时已知,并具有默认值

相比之下,引用类型(基本上是每个类)本身并不持有任何值,而是通过引用将数据“分组”在一起。引用类型将指向其他引用类型,或最终指向一个值类型(持有实际数据)

这个区别对于您的问题很重要。
List
是一个动态大小的集合,它可以在不创建新对象的情况下增长或收缩,因为它是如何实现的。列表中的每个元素都指向下一个元素,因此它的大小无法提前知道

数组是声明为特定大小的固定大小集合。数组类型决定系统保留的内存量。例如,100个元素的
字节[]