c# – 为什么“索引超出范围”异常列表但不是数组?
当我初始化一个数组并使用索引器访问元素时,工作正常:
object[] temp = new object[5]; temp[0] = "bar"; 现在我期望同样的工作可以使用List< T>,因为您可以通过将容量传递给构造函数来初始化它: List<object> temp = new List<object>(5); temp[0] = "bar"; 然而,最后一行会抛出以下异常:
为什么这会发生在列表< T>类型,但不是数组?由于数组只是针对CLR的集合的较低级别抽象,那么为什么会发生此异常? 原来question by Awais Mahmood. 解决方法
简短的答案:因为5有很大的不同.
长答案: 初始化数组时,您可以设置其大小,并且该大小是固定的.阵列以后不能生长或缩小.因此, object[] temp = new object[5]; 意味着您创建一个包含5个元素的新数组.因此,您可以在创建数组后立即访问这些元素. 对于列表,大小是可变的. 传递给列表的构造函数的5是该内部数组的初始大小: List<object> temp = new List<object>(5); 这意味着,您创建的列表具有零个元素(因此是异常),但内部数组初始化为5的大小,因此您可以添加5个元素,而不需要更换内部数组. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |