Досрочный выход из foreach
Сейчас пишу функцию которая будет чистить мой список(ProjectsUpdate()) в UI(рис 1.) и загружать в него новые слоты из префаба, но столкнулся с тем, что удаляются не все элементы списка. Начал дебажить шаг за шагом и нашёл что у меня при удалении первого элемента списка, повторный заход в foreach пропускается. Как сделать что бы список нормально чистился? скрипт и топологию(рис. 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);
}