列表索引是如何工作的?c# 专用列表航路点; 无效移动到() { 如果(航路点[0]!=null) { 打印(“它为什么打印这个?”); } }

列表索引是如何工作的?c# 专用列表航路点; 无效移动到() { 如果(航路点[0]!=null) { 打印(“它为什么打印这个?”); } },c#,list,indexing,C#,List,Indexing,所以我试着使用列表,但我不明白。 到目前为止,这个列表是空的,但它会打印这些内容。我从来没有加过什么。为什么if子句是正确的 我的索引有什么问题吗 这是错误的方法吗 列表中是否总是有第一个元素 我想稍后将航路点添加到列表中。我总是希望该方法获取列表的第一个元素,然后在执行某些操作后将其删除。那么第一个元素是空的,还是所有其他元素都会下拉一个索引? 列表是愚蠢的数组。请帮助这是列表索引的代码- 仅就一般知识而言,通用列表实现基于幕后动态增长的数组 如果尚未初始化列表,则会出现空异常。 如果列表字段

所以我试着使用列表,但我不明白。 到目前为止,这个列表是空的,但它会打印这些内容。我从来没有加过什么。为什么if子句是正确的

我的索引有什么问题吗

这是错误的方法吗

列表中是否总是有第一个元素

我想稍后将航路点添加到列表中。我总是希望该方法获取列表的第一个元素,然后在执行某些操作后将其删除。那么第一个元素是空的,还是所有其他元素都会下拉一个索引?
列表是愚蠢的数组。请帮助

这是列表索引的代码-


仅就一般知识而言,通用列表实现基于幕后动态增长的数组

  • 如果尚未初始化列表,则会出现空异常。 如果列表字段没有任何其他赋值 我建议您将列表字段设置为只读,并使用字段初始化,省去了在每个构造函数或usage method\property中检查它是否为null并重新初始化它的麻烦

  • 一旦列表的默认构造函数被调用,它的“数据存储数组 如果您要求,初始化为4的容量(如果我没有弄错的话) 任何超出可用容量范围(0到4-1)的索引 超出范围异常

  • 在使用索引器之前,您应该检查以上两项, 例如:

    public T this[int index] {
            get {
                // Fllowing trick can reduce the range check by one
                if ((uint) index >= (uint)_size) {
                    ThrowHelper.ThrowArgumentOutOfRangeException();
                }
                return _items[index];
            }
            set {
                if ((uint) index >= (uint)_size) {
                    ThrowHelper.ThrowArgumentOutOfRangeException();
                }
                _items[index] = value;
                _version++;
            }
        }
    

  • 当您的代码运行时,您会得到一个空引用异常,因为
    航路点
    尚未初始化-您能显示创建列表的代码吗?代码在运行时会抛出编译器错误或空引用异常-您正在使用的实际代码是什么?此处未显示的某些东西必须正在初始化
    航路点
    。如果它只是
    waypoints=newlist()
    ,那么它将抛出一个IndexOutOfRangeException。(我确实注意到,如果这是XNA,那么Vector2是一个结构,永远不会为null,但这与这里的要点无关)嗯,这是您的全部代码吗?我本以为会有一个错误,一定有部分代码没有显示在这里。非工作小提琴抛出错误…:)在到达程序的这一部分之前,您不仅初始化了
    航路点
    ,而且还向该列表添加了一些内容。IE:查找对
    waypoints=new List()
    waypoints的调用。添加(…)
    或查找分配
    waypoints
    变量的内容。在任何情况下,询问此代码为什么不能按预期工作都需要一个示例
    public T this[int index] {
            get {
                // Fllowing trick can reduce the range check by one
                if ((uint) index >= (uint)_size) {
                    ThrowHelper.ThrowArgumentOutOfRangeException();
                }
                return _items[index];
            }
            set {
                if ((uint) index >= (uint)_size) {
                    ThrowHelper.ThrowArgumentOutOfRangeException();
                }
                _items[index] = value;
                _version++;
            }
        }
    
    private bool TryGetValue(int index , out Vector2 vector)
    {
      vector = default(Vector2);
      if(wayPoints!=null&& index >=0&& wayPoint.Count> index)
      {
        vector = wayPoints[index];
        return true;
      }
    
      return false;    
    }