Ich entwickle ein Spiel in Unity, und ich möchte ein Element aus einer Liste entfernen. Aber wenn ich die Methode List<T>.Remove(T)
aufrufen, wird nichts entfernt.Das Element kann nicht aus der Liste entfernt werden
private void OnMouseDown()
{
Debug.Log("Clicked for mixing");
foreach (Element element in ElementsControl.elements)
{
if (element.composition.Length > 1)
{
Debug.Log("FINE. Element is not pure");
List<Element> a = new List<Element>();
foreach (Element compElement in element.getRawComposition())
{
a.Add(compElement);
}
string allComposition = "";
foreach (Element dispElement in a)
{
if (allComposition == "")
allComposition = dispElement.name;
else
allComposition += " + " + dispElement.name;
}
Debug.Log(element.name + " composition is: " + allComposition);
string cauldElements = "";
foreach (Element cauldElem in cauldron.getElements())
{
if (cauldElements == "")
cauldElements = cauldElem.name;
else
cauldElements += " + " + cauldElem.name;
}
Debug.Log("Cauldron has: " + cauldElements);
if (ContainsAllItems(cauldron.getElements(), a))
{
Debug.Log("OK. Mix result is " + element.name + ", used " + a);
Debug.Log("Removing " + a.Count + " elements from cauldron");
int counter = 0;
foreach (Element remElem in a)
{
cauldron.getElements().Remove(remElem);
Debug.Log("Removed " + remElem + " from cauldron");
counter++;
}
Debug.Log("Removed " + counter + " elements from cauldron");
Debug.Log("Adding " + element + " to cauldron");
cauldron.getElements().Add(element);
return;
}
else
Debug.Log("NO. Mix result not ok");
}
}
}
Das Problem kommt in diesen Zeilen:
foreach (Element remElem in a)
{
cauldron.getElements().Remove(remElem);
Debug.Log("Removed " + remElem + " from cauldron");
counter++;
}
Wenn ich versuche, es zu löschen, die Liste bleibt, wie es, ohne etwas zu löschen.
Was Element ist? Haben Sie es debuggen und sichergestellt, dass das gleiche Element in der Liste vorhanden ist? –
'cauldron.getElements()' erstellt wahrscheinlich eine neue Liste, die dann verworfen wird. – TaW
Inn Ihren Code wird es nur in dem Fall entfernt werden, wenn 'remElem.Equals (compElement) == true' – Fabio