【问题标题】:List<T>.Insert() out of bounds? C# [duplicate]List<T>.Insert() 越界? C# [重复]
【发布时间】:2018-06-11 04:15:51
【问题描述】:

我正在尝试向特定索引处的列表添加一个值,根据我所阅读的所有内容,这应该可以使用 List 的 Insert() 方法。

除了我得到异常“索引必须在列表的范围内。参数名称:索引`

这是我的完整示例代码。

class Program
{
    static void Main(string[] args)
    {
        MyList myList = new MyList();
    }
}
class MyList : List<int>
{
    public MyList()
    {
        this.Capacity = 2;
        this.Insert(1, 0);
    }
}

是否只有更改为可空列表类型并为每个索引调用.Add(null) 而不使用Insert() 的选项?

【问题讨论】:

  • 1.列表可以为空 2. 列表/数组从 0 开始。您的列表没有条目,并且您试图在第二个位置插入一个值。
  • 你到底想做什么?
  • 你实际上不应该从List&lt;&gt;继承。只需使用组合并存储对组合的引用。

标签: c# list insert


【解决方案1】:

您不能在最后一项之外插入一项,这就是您收到超出范围的错误消息的原因。

如果您事先知道列表不会超过一定大小,即容量,那么设置列表的容量可能会很有趣。

设置容量不会在列表中创建任何元素。

【讨论】:

    【解决方案2】:
    • 容量不等于列表的大小,它是在内部调整大小之前的内部大小,它是为了性能
    • 列表不是从 1 开始,而是从 0 开始

    List.Capacity Property

    获取或设置内部数据结构的元素总数 无需调整大小即可保持。

    您正在尝试向不存在的存储桶添加一些内容

    更新

    我试图在最后一个索引之后插入一个项目,这就是重点 使用 1.

    从您的代码中,您在 0 处没有任何内容可以在 1 处添加任何内容

    在向 1 添加内容之前先向 0 添加内容

    也不要继承表单列表,它的坏表单有很多原因。

    var myAwesomeList = new List<int>();
    // add the number 10
    myAwesomeList.Add(10);
    // insert the number 7 before 10
    myAwesomeList.Insert(0,7);
    

    【讨论】:

    • 我正在尝试在最后一个索引之后插入一个项目,这就是使用1的重点。有没有办法设置大小?
    • @UpTide "After the last index" -> empty 列表中的最后一个索引实际上是-1,确定吗?
    • 这个问题在stackoverflow的其他地方得到了解决。我将把它标记为重复。
    • @UpTide 如你所愿,下次提问前花5分钟搜索是值得的
    • @TheGeneral 像往常一样,我的问题是不知道问题的名称。即您的第一句话“容量不等于大小”,引发了对“如何设置列表 c# 的大小”的搜索。 List&lt;T&gt; 没有名为 Size 的属性,它不像您想象的那么直观(尤其是使用名为 Capacity 的属性)。
    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多