Unity / C#:使用列表存储数字,删除元素

时间:2016-12-29 10:23:44

标签: list unity3d

我一直在讨论与列表有关的问题。我是初学者,很抱歉,如果这有点不清楚..

我的目标是能够从键盘输入中编写数字,这些数字将显示在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];
    }
}
}

2 个答案:

答案 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);