将对象添加到arraylist并读取它们

时间:2017-09-18 09:11:25

标签: c# winforms visual-studio arraylist

我尝试按照DataPerLabel的代码向Arraylist allData添加DataPerLabel的对象:

class DataPerLabel
{
    public String labelName;
    public String labelAdress;
    public String dataType;

    public DataPerLabel(String labelName, String labelAdress, String dataType)
    {
        this.labelName = labelName;
        this.labelAdress = labelAdress;
        this.dataType = dataType;
    }

    public String getLabelName()
    {
        return labelName;
    }

    public String getLabelAdress()
    {
        return labelAdress;
    }

    public String getDataType()
    {
        return dataType;
    }
}

在以下代码中,我尝试将DataPerLabel的对象添加到arraylist

submitButton.Click += (sender, args) =>
{
    String label = textboxLabel.Text;
    String adress = textboxAdress.Text;
    String dataType = "hey";

    if (buttonsLabelBool.Checked)
    {
        dataType = "Bool";
    }
    else if (buttonsLabelReal.Checked)
    {
        dataType = "Real";
    }
    else if (buttonsLabelInt.Checked)
    {
        dataType = "Int";
    }
    allData.Add(new DataPerLabel(label, adress, dataType));
};

最后,我尝试通过在arrayList中显示textbox来宣读private void test() { Button btn = new Button(); btn.Location = new Point(500,500); btn.Text = "test"; btn.Click += (sender, args) => { foreach (var item in allData) { //Display arraylist per object here //Something like : item.getLabelName(); } }; } ,请参阅以下代码:

multipart/form-data

我不确定我做错了什么,希望你能帮忙!

2 个答案:

答案 0 :(得分:7)

ArrayList存储System.Object列表。您需要将对象强制转换回DataPerLabel,如下所示:

foreach (var item in allData)
{
    ((DataPerLabel)item).getLabelName();
}

或者,您可以在foreach中指定数据类型,而不是var中指定的Jakub Dąbek,如下所示:

foreach (DataPerLabel item in allData)
{
    item.getLabelName();
}

更好的方法是使用通用列表/集合List<DataPerLabel>来存储数据,以便可以避免转换。

答案 1 :(得分:1)

Yiu应使用List<T>代替ArrayList。这样,列表中的每个项目都已有正确的类型,您可以访问成员:

foreach (DataPerLabel item in allData)
{
    item.GetLabelItem();
}

这假定allData的定义如下:

allData = new List<DataPerLabel>();

而不是allData = new ArrayList()

如果您真的必须使用ArrayList,那么您应该将项目投射到实际类型。上面的代码实际上已经完成了这一切。但是你也可以使用它:

foreach (var item in allData)
{
    ((DataPerLabel)item).GetLabelItem();
}