我一直在讨论与列表有关的问题。我是初学者,很抱歉,如果这有点不清楚..
我的目标是能够从键盘输入中编写数字,这些数字将显示在Unity的UI元素中。
为此,我决定使用一个列表,因为我想要在显示器上添加控件,(例如,添加一个"。"每3个数字,这样就更容易了可读,如" 3.489.498")。
所以基本上,我将新输入存储在此列表中,然后每次有新数字作为输入时,我都会使用display.text显示此列表。
这实际上非常好用,但后来我希望能够删除最后输入的元素。所以我添加了一个带有List.Remove()的退格热键。
这就是梦魇开始的地方。当我按下" 1"并且在之后删除,但由于某些原因它不适用于2.
错误信息是:"参数超出范围,参数名称:索引。"
我无法解决这个问题:(
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class BoxCreateNumber : MonoBehaviour {
public Text textDisplayNumber;
public List<int> numberList = new List<int>();
void Start () {
}
void Update () {
CollectingNumberInput ();
}
void CollectingNumberInput(){
if (Input.GetKeyDown(KeyCode.Keypad1)){
numberList.Add (1);
//numberList.Insert (numberList.Count,1);
DisplayNumber ();
} else if (Input.GetKeyDown(KeyCode.Keypad2)) {
numberList.Add (2);
//numberList.Insert (numberList.Count,2);
DisplayNumber ();
} else if (Input.GetKeyDown(KeyCode.Backspace)) {
numberList.Remove(numberList.Count);
DisplayNumber ();
}
}
void DisplayNumber(){
textDisplayNumber.text = "";
for (int i = 0; i <= numberList.Count; i++) {
textDisplayNumber.text += numberList [i];
}
}
}
答案 0 :(得分:1)
您只需阅读documentation。
public bool Remove(
T item
)
参数
item - 要从List中删除的对象。对于引用类型,该值可以为null。
不是传递要删除的对象的函数,而是传递列表中的元素数。这意味着如果列表包含元素“1”作为其唯一元素,那么它将起作用,但只是偶然。
致电RemoveAt(numberList.Count - 1)
会做您想做的事。 RemoveAt
要删除元素的索引,索引从0开始,因此最后一个是Count-1
。
答案 1 :(得分:0)
尝试此操作以删除最后一个元素
numberList.RemoveAt(numberList.Count-1);