Списки в c# и как их читать?

165
10 октября 2021, 22:40

у меня достаточно лёгий вопрос (наверное), как считать значения с списка при заданном значении? Например у меня есть список, очень большой и я хочу прочитать линию с номером некой переменной.

print(dots[i]);

Где dots - это список Где i там номер строки.

Юнити выдает не критическую ошибку:

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.

Parameter name: index

Из неё я понял что такой строки в списке нет, но я проверял с дебагом - значение было 64 и в списке оно было. Спасибо.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlanetTerrain : MonoBehaviour
{
    public static int seed;
    public static Color color;
    public static bool deathGas = false;
    public static float amplitude;
    public static float freq;
    public int dotcount = 0;
    public List<Vector2> chunkdots;
    public GameObject tile;
    public int worldSize;
    private void Awake()
    {
        seed = Random.Range(1, 10000);
        amplitude = Random.Range(8, 100);
        freq = Random.Range(83, 100);
        Cursor.lockState = CursorLockMode.Locked;
    }
    private void Start()
    {
        SetPoints();
        StartCoroutine(Generate());
    }
    void SetPoints()
    {
        for (int x = 0; x < worldSize; x++)
        {
            for (int z = 0; z < worldSize; z++)
            {
                dotcount++;
                Debug.Log(dotcount);
                chunkdots.Add(new Vector2(x * 16, z * 16));
            }
        }

    }
    IEnumerator Generate()
    {
        yield return new WaitForSeconds(0.1f);
        for (int i = 0; i < dotcount; i++)
        {
            int ic = 0;
            ic = dotcount;
            Debug.Log("ic = " + ic);
            Instantiate(tile, new Vector3(chunkdots[ic].x, 0, chunkdots[ic].y), Quaternion.identity);
        }
    }
}
Answer 1

Если у вас 64 элемента в списке, убедитесь, что вы не пытаетесь получить элемент с индексом 64. 64й элемент в списке будет иметь индекс 63, так как индексы начинаются с 0, а не с 1.

Answer 2

Вы во всём цикле присваиваете ic величину массива, тем самым получая Index was out of range. последний индекс в массиве из 64 элементов это 63!

for (int i = 0; i < chunkdots.Count; i++) {
    Debug.Log("i:"+i+" x:"+chunkdots[i].x+" y:"+chunkdots[i].y);
    Instantiate(tile, new Vector3(chunkdots[i].x, 0, chunkdots[i].y), Quaternion.identity);           
}

И считать объём списка отдельной переменной не нужно, у List есть свойство Count, как у обычного массива Lenght.

READ ALSO
Ошибка при неявном преобразовании [дубликат]

Ошибка при неявном преобразовании [дубликат]

Пишу класс рациональных чиселПри неявном преобразовании возникает ошибка (StackOverflowException), причину которой понять не получается

131
Почему выдается ошибка?

Почему выдается ошибка?

Код вырван из контекста, но я думаю не имеет смысла копировать сюда всю программуЕсть код PHP, который обрабатывает данные, введенные в форму:

260
XML не принимает URL

XML не принимает URL

не могу в ХМЛ файлу добавить урл не получается вот сам код заранее спасибо

85