private List<Vector2> waypoints;
void Moveto ()
{
if (waypoints[0] != null)
{
print("Why does it print this?");
}
}
所以我尝试使用列表,但我没有得到它。 到目前为止,这个列表是空的,但它打印的东西。我从未添加任何东西。为什么if子句是真的?
我做错了索引吗?
这是假方法吗?
列表中是否总有第一个元素?
我想稍后在列表中添加航点。我总是希望该方法采用列表的第一个元素,并在做完之后删除它。第一个元素是空的,还是所有其他元素都会下拉一个索引? 列表是愚蠢的数组。请帮忙
答案 0 :(得分:1)
仅仅为了一般知识,通用列表实现基于幕后动态增长的数组。
如果您尚未初始化列表,则会收到null异常。 如果您没有对列表字段进行任何其他分配 我建议你将列表字段设置为readonly并使用字段初始化,并保存自己将其检查为null并在每个构造函数或使用方法\属性中重新初始化它的头痛。
一旦List的默认构造函数被调用,它的'数据存储阵列就是 如果你要求,初始化为4的容量(如果我没有记错的话) 您可以使用的可用容量范围(零到4-1)之间的任何索引 超出范围例外。
在使用索引器之前,您应该检查上面的两个, 例如:
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;
}
答案 1 :(得分:-3)
以下是来自Reflector Webtropy -
的List索引的代码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++;
}
}