私はUnityでゲームを開発しています。リストから要素を削除したいと思います。しかし、私がメソッドList<T>.Remove(T)
を呼び出すと、何も削除されません。リストから要素を削除できません
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");
}
}
}
問題は、これらの行に来る:
foreach (Element remElem in a)
{
cauldron.getElements().Remove(remElem);
Debug.Log("Removed " + remElem + " from cauldron");
counter++;
}
私はそれを削除しようとすると、リストには何も削除せず、それととどまります。
要素は何ですか?それをデバッグして、同じ要素がリストに存在することを確認しましたか? –
'cauldron.getElements()'はおそらく新しいリストを作成し、それを破棄します。 – TaW
あなたのコードは 'remElem.Equals(compElement)== true 'の場合にのみ削除されます。 – Fabio