c#系列 list详情

这篇文章主要介绍了c#系列 list,list 本质是一个数组,。就跟我们操作系统一样,提前申请内存大小。所以我们程序一般都有一个申请内存,实际使用内存,内存碎片这几个概念,下面俩看文章详细内容吧

这里可以看出list的remove操作还是性能损耗很大的,尤其是大的list

这里有没有注意道一个_version,这个有什么作用呢?

当遍历的时候我们就用的到


internal Enumerator(List<T> list)
{
 _list = list;
 _index = 0;
 _version = list._version;
 _current = default;
}

public void Dispose()
{
}

public bool MoveNext()
{
 List<T> localList = _list;

 if (_version == localList._version && ((uint)_index < (uint)localList._size))
 {
  _current = localList._items[_index];
  _index++;
  return true;
 }
 return MoveNextRare();
}

private bool MoveNextRare()
{
 if (_version != _list._version)
 {
  ThrowHelper.ThrowInvalidOperationException_InvalidOperation_EnumFailedVersion();
 }

 _index = _list._size + 1;
 _current = default;
 return false;
}

重点看上面的list,上面表面了,当我们使用foreach 进行遍历的时候,如果我们进行了删除或者添加,那么_version就会发生变化,那么可想而知会抛出异常。

例子:


static void Main(string[] args)
{
 List<object> lists = new List<object>();

 lists.Add("123456");

 lists.Add("1231246");

 lists.Add("dsadadsads");

 lists.Add("eqewqew");

 foreach (var item in lists)
 {
  if (item.ToString() == "1231246")
  {
   lists.Remove(item);
  }
 }

 Console.ReadLine();
}

然后就会抛出异常了。

那么这里就不介绍find了,find 就是遍历数组,找出是否相等。

哦,对了讲另外一个故事。


public int Count => _size;


count-1 就是当前插入的位置。

那么如果你想删除某个元素的时候,那么你可以进行removeat 删除,这样避免了find。

那么非常值得注意的是如果删除了其他元素,如果那么元素的位置小于你记录的位置,那么应该是位置进行减一。

到此这篇关于c#系列 list详情的文章就介绍到这了,更多相关c#系列 list内容请搜索得得之家以前的文章希望大家以后多多支持得得之家!

本文标题为:c#系列 list详情