【发布时间】:2013-10-31 07:14:59
【问题描述】:
我不是在问一般数组和列表之间的区别,我只是在问他们在这种情况下的区别。
我有一个数组。数组索引是动态值,我有一个整数List。
int DynamicValue=20 ;//It's any values should be coming from database or anywhere
int[DynamicValue] array1=new int[DynamicValue];//Array declaration
List<int> list1=New List<int>();//List declaration
现在我创建一个for 循环来向数组和列表添加值:
//先在数组中添加值
for(i=0;i<DynamicValue;i++)
{
array1[i]=i;
}
//然后将值添加到列表中
for(i=0;i<DynamicValue;i++)
{
list1.Add(i);
}
现在上面的代码有什么区别?
我的问题是:
- 数组是类型安全的,并且还定义了索引大小。那么为什么很多人喜欢这种情况下的列表呢? (我知道它对泛型编码很有用,但我要求这种情况)
- 数组
for循环不会产生任何装箱和拆箱,那么我们为什么需要List? - 哪个
for循环(数组或列表)是最好的在这种情况下? - 哪个
for循环将提供良好的性能(我认为for循环都很好,因为此代码不会尝试任何装箱和拆箱,而且此代码是类型安全的。但我不确定这一点时间哪个更好)?
【问题讨论】:
-
@Mansfield 感谢您的编辑先生!
-
没问题。我知道您想保持礼貌,但尽量避免添加太多与下次问题无关的信息 - 当它变得混乱时,人们更有可能因为无法理解而关闭 - 即使这是个好问题!
-
他们确实有你的场景。您可以将该问题中解释的所有要点应用于任何场景。在接受的答案中,这一行回答了您的情况:“如果您知道数据是固定长度的,并且您想出于某些非常具体的原因进行微优化(基准测试后),那么数组可能有用”。重点是 - 您将在 数据库调用 之后填充您的数组或列表,这将需要数十甚至数百毫秒才能完成。如果在那之后你花一微秒来初始化你的数组,或者两微秒来初始化你的列表,这真的无关紧要了。
-
关于“装箱和拆箱”,这不会发生,因为与 java 不同,C# 可以在值类型上有泛型。
-
那部分没有包含在副本中,所以我想我至少会回答这个问题。
标签: c# arrays performance list collections