Dzień dobry,
Mam kod
private void find2(List<molecule> _substraty, List<molecule> _produkty)
{
int myID = funcID;
funcID++;
List<element> sub = utils.getStats(_substraty);
List<element> pro = utils.getStats(_produkty);
textBox1.Text = utils.getText(_substraty);
textBox2.Text = utils.getText(_produkty);
//if (sub.Count != pro.Count) return;
string s = "";
List<molecule> tab = new List<molecule>();
int ID = 0;
for (int i = 0; i < sub.Count; i++)
{
if(sub[i].count != pro[i].count)
{
if(sub[i].count > pro[i].count)
{
tab = _produkty;
ID = 2;
}
else
{
tab = _substraty;
ID = 1;
}
s = sub[i].symbol;
break;
}
}
if (s == "")
{
textBox1.Text = utils.getText(_substraty);
textBox2.Text = utils.getText(_produkty);
MessageBox.Show("Uzgodniono!");
}
MessageBox.Show($"my state: {utils.getText(_substraty)} -> {utils.getText(_produkty)}");
List<molecule> subState = _substraty;
List<molecule> proState = _produkty;
List<molecule> tabState = tab;
for (int i = 0; i < tab.Count; i++)
{
//MessageBox.Show($"{utils.getText(_substraty)} -> {utils.getText(_produkty)}");
MessageBox.Show(myID.ToString());
if (tab[i].findInElements(s).Item1 != null)
{
tab[i].count += 1;
if(ID == 1)
{
_substraty = tab;
}else if(ID == 2)
{
_produkty = tab;
}
if(tab[i].count < 3)
{
MessageBox.Show("Start " + funcID);
find2(_substraty, _produkty);
}
else
{
MessageBox.Show("TEST");
textBox1.Text = utils.getText(_substraty);
textBox2.Text = utils.getText(_produkty);
}
MessageBox.Show("data for: " + myID);
MessageBox.Show($"my first state: {utils.getText(subState)} -> {utils.getText(proState)}");
MessageBox.Show($"my state: {utils.getText(_substraty)} -> {utils.getText(_produkty)}");
_substraty = subState;
_produkty = proState;
tab = tabState;
MessageBox.Show($"retrun to: {utils.getText(_substraty)} -> {utils.getText(_produkty)}");
}
}
MessageBox.Show("end " + myID);
}
Listę subState i proState ustawiam przed drugą pętlą for. Po każdym wykonaniu tej pętli listy _substraty i _produkty mają wracać do stanu z przed pętli i robi to przypisanie do nich z powrotem list subState i proState.
Albo program zgłupiał albo ja. Bo jakimś cudem listy subState i proState się zmieniają podczas pętli for.
Do zbadanie tego użyłem message boxów i wynik był mniej więcej taki:
ten stan jest w subState i proState przed wykonaniem drugiej pętli
stan po wykonaniu
zamiast 3H2O powinno być H2O.
Wie ktoś czemu tak się dzieje?