Досрочный выход из foreach

Сейчас пишу функцию которая будет чистить мой список(ProjectsUpdate()) в UI(рис 1.) и загружать в него новые слоты из префаба, но столкнулся с тем, что удаляются не все элементы списка. Начал дебажить шаг за шагом и нашёл что у меня при удалении первого элемента списка, повторный заход в foreach пропускается. Как сделать что бы список нормально чистился? скрипт и топологию(рис. 1) прилагаю. рис. 1

using UnityEngine;
using System.IO;
using UnityEngine.UI;
using TMPro;
using System.Linq;

public class ProjectViewManager : MonoBehaviour
{
    [SerializeField] private Transform table;
    [SerializeField] private GameObject slotTemp;
    public void ProjectsUpdate()
    {
        print(table.childCount);
            if (table.childCount > 0)
            {
                foreach (Transform child in table) DestroyImmediate(child.gameObject);
            }
        var list = System.IO.Directory.GetFiles(Application.persistentDataPath);
        foreach (var file in list.ToList()) OpenJson(file);
    }
    public void SetTemp(string name,int cost,int duration)
    {
        GameObject temp = Instantiate(slotTemp,table);
        temp.transform.Find("name").GetComponent<TextMeshProUGUI>().text = name;
        temp.transform.Find("cost").GetComponent<TextMeshProUGUI>().text = "cost:"+cost.ToString();
        temp.transform.Find("duration").GetComponent<TextMeshProUGUI>().text = "duration:"+duration.ToString();
    }
    private void Start()
    {
        ProjectsUpdate();
    }

    public void OpenJson(string name)
    {
        string dataToLoad = "";
        string fullPath = Path.Combine(Application.persistentDataPath, name);
        FileStream stream = new FileStream(fullPath, FileMode.Open);
        StreamReader reader = new StreamReader(stream);
        dataToLoad = reader.ReadToEnd();
        ProjData data = JsonUtility.FromJson<ProjData>(dataToLoad);
        SetTemp(data.projName, data.cost, data.duration);
        reader.Close();
    }
}

Ответы (1 шт):

Автор решения: aepot

Можно сделать снапшот массива элементов, например так

foreach (Transform child in table.Cast<Transform>().ToArray())
{
    DestroyImmediate(child.gameObject);
}

Кстати, вот здесь можно упростить

public void OpenJson(string name)
{
    string fullPath = Path.Combine(Application.persistentDataPath, name);
    string dataToLoad = File.ReadAllText(fullPath);
    ProjData data = JsonUtility.FromJson<ProjData>(dataToLoad);
    SetTemp(data.projName, data.cost, data.duration);
}
→ Ссылка