C#清除数组,但不使用列表的0替代项填充。清除(将大小恢复为0)
是否可以完全删除C#中的数组,但不使用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赋值给它 因为值类型对象有一些默认值
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个元素的字节[]