Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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# 多少次System.Collections.Generic.List<;T>;可以在.net中更改吗?_C#_.net - Fatal编程技术网

C# 多少次System.Collections.Generic.List<;T>;可以在.net中更改吗?

C# 多少次System.Collections.Generic.List<;T>;可以在.net中更改吗?,c#,.net,C#,.net,在一次C#采访中,我被问到,对于一个列表实例,我们可以调用Add或Remove方法多少次?。我的回答是int.MaxValue次,但似乎我错了 编辑:问题不在于评论中指出的列表大小限制,而在于。问题是我可以更改列表多少次 您可以在.net中无限次地更改列表实例以及其他类似的基于数组的结构。是的,您最多只能添加int.MaxValue值(实际上稍微少一点),但您可以根据需要多次删除和添加,但不能超过List.Capacityvalue()和可用内存 如果要查看List.Add,您将看到代码vers

在一次C#采访中,我被问到,对于一个列表实例,我们可以调用Add或Remove方法多少次?。我的回答是
int.MaxValue
次,但似乎我错了

编辑:问题不在于评论中指出的列表大小限制,而在于。问题是我可以更改列表多少次

您可以在.net中无限次地更改
列表
实例以及其他类似的基于数组的结构。是的,您最多只能添加
int.MaxValue
值(实际上稍微少一点),但您可以根据需要多次删除和添加,但不能超过
List.Capacity
value()和可用内存

如果要查看
List.Add
,您将看到代码
version++
,这意味着添加新元素时列表实例的版本会更改。每次列表修改都会发生同样的情况(
添加
删除
插入
等等)。但是当版本为
int.MaxValue
时,增量运算符
version++
不会引发异常,因为默认情况下,溢出检查被抑制。也许这个事实让你想到了
int.MaxValue
answer

此外,此行
\u items[\u size++]=item
也不是问题,因为删除项目时,会减小项目的大小。下一行
如果(\u size==\u items.Length)确保recapacity(\u size+1)
也没有限制。

您可以无限次地更改
列表
实例以及.net中其他类似的基于数组的结构。是的,您最多只能添加
int.MaxValue
值(实际上稍微少一点),但您可以根据需要多次删除和添加,但不能超过
List.Capacity
value()和可用内存

如果要查看
List.Add
,您将看到代码
version++
,这意味着添加新元素时列表实例的版本会更改。每次列表修改都会发生同样的情况(
添加
删除
插入
等等)。但是当版本为
int.MaxValue
时,增量运算符
version++
不会引发异常,因为默认情况下,溢出检查被抑制。也许这个事实让你想到了
int.MaxValue
answer


此外,此行
\u items[\u size++]=item
也不是问题,因为删除项目时,会减小项目的大小。下一行
如果(\u size==\u items.Length)确保重新访问能力(\u size+1)
也没有限制。

可能重复,但tl;dr是说,从理论上讲,您可以继续添加到列表中,超出int.MaxValue,但是您将无法处理超出int.MaxValue的内容。希望能有帮助。我想是无数次了。只要添加和删除呼叫的数量没有太大差异。@Wazner什么?“只要添加和删除呼叫的数量没有太大差异。”?这到底是什么意思?如果我叫“添加”一次,然后叫“删除”一次,你就可以永远这么做了。但是如果你添加2个,只删除一个,你会在某个时候达到一个极限。正如@Wazner所说,只要内存不是问题(例如,你添加和删除相同的东西,只是为了测试你可以调用列表中的方法的原始时间),你应该能够无限次地修改列表(使用这两种方法)。当然,在实践中也存在记忆的问题,这个问题已经得到了很好的回答;dr是说,从理论上讲,您可以继续添加到列表中,超出int.MaxValue,但是您将无法处理超出int.MaxValue的内容。希望能有帮助。我想是无数次了。只要添加和删除呼叫的数量没有太大差异。@Wazner什么?“只要添加和删除呼叫的数量没有太大差异。”?这到底是什么意思?如果我叫“添加”一次,然后叫“删除”一次,你就可以永远这么做了。但是如果你添加2个,只删除一个,你会在某个时候达到一个极限。正如@Wazner所说,只要内存不是问题(例如,你添加和删除相同的东西,只是为了测试你可以调用列表中的方法的原始时间),你应该能够无限次地修改列表(使用这两种方法)。当然,在实践中也存在内存问题,这种情况已经得到了很好的回答。只要您有内存,就可以继续添加项目。阅读答案的副本。但是,如果您添加一个项目,然后删除它,您将不会更改内部数组长度,因此您可以无限次地执行此操作。只有当您没有足够的空间时,内部数组才会增长。为什么说“您不能添加超过
int.MaxValue
value的值”?根据Microsoft公开的列表实现源代码,接下来是“实际上少了一点”(int-MaxArrayLength=0X7FEFFFFF)。问题是这个问题没有提供完整的上下文。我们删除的频率和删除的频率一样吗?反之亦然?(在尝试删除之前是否需要执行空检查?)?这个问题有点误导。在调用“添加和删除”之前,是否使用数据初始化列表?是否对代码本身进行了任何配置更改,从而允许列表更大?是否存在“人为”限制?问题中没有解决这些问题。只要您有内存,就可以继续添加项目。阅读答案的副本。但是,如果您添加一个项目,然后删除它,您将不会更改内部数组长度,因此您可以无限次地执行此操作。只有当您没有足够的空间时,内部数组才会增长。为什么说“您不能添加超过
int.MaxValue
value的值”?根据Microsoft公开的列表实现源代码,接下来是“实际上少了一点”(int-MaxArrayLength=0X7FEFFFFF)