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

C# 将对象添加到arraylist并读取它们,c#,winforms,visual-studio,arraylist,C#,Winforms,Visual Studio,Arraylist,我正在尝试将DataPerLabel的对象添加到我的Arraylist allData中,代码如下: 在以下代码中,我尝试将DataPerLabel的对象添加到arraylist中: 最后,我尝试通过在文本框中显示来读取arrayList,请参见以下代码: private void test() { Button btn = new Button(); btn.Location = new Point(500,500); btn.Text = "test"; bt

我正在尝试将DataPerLabel的对象添加到我的Arraylist allData中,代码如下:

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

最后,我尝试通过在文本框中显示来读取arrayList,请参见以下代码:

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();
        }
    };
}
我不确定我做错了什么,希望你能帮忙

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

foreach (var item in allData)
{
    ((DataPerLabel)item).getLabelName();
}
foreach (DataPerLabel item in allData)
{
    item.getLabelName();
}
或者,您可以在foreach中指定数据类型,而不是在注释中指出的var,如下所示:

foreach (var item in allData)
{
    ((DataPerLabel)item).getLabelName();
}
foreach (DataPerLabel item in allData)
{
    item.getLabelName();
}
更好的方法是使用通用列表/集合列表来存储数据,这样可以避免强制转换。

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

foreach (var item in allData)
{
    ((DataPerLabel)item).getLabelName();
}
foreach (DataPerLabel item in allData)
{
    item.getLabelName();
}
或者,您可以在foreach中指定数据类型,而不是在注释中指出的var,如下所示:

foreach (var item in allData)
{
    ((DataPerLabel)item).getLabelName();
}
foreach (DataPerLabel item in allData)
{
    item.getLabelName();
}
更好的方法是使用通用列表/集合列表来存储数据,这样可以避免强制转换。

Yiu应该使用列表而不是ArrayList。这样,列表中的每个项目都已具有正确的类型,您可以访问以下成员:

foreach (DataPerLabel item in allData)
{
    item.GetLabelItem();
}
这假设所有数据的定义如下:

allData = new List<DataPerLabel>();
Yiu应该使用列表而不是ArrayList。这样,列表中的每个项目都已具有正确的类型,您可以访问以下成员:

foreach (DataPerLabel item in allData)
{
    item.GetLabelItem();
}
这假设所有数据的定义如下:

allData = new List<DataPerLabel>();

出什么问题了?使用列表而不是ArrayList。你可以通过铸造物品来解决问题,但如果你可以使用列表,为什么要铸造呢?同意Sinatr。使用列表可以直接访问当前项目的成员。使用ArrayList,您必须将每个项强制转换为DataPerLabel。Visual studio没有为我提供执行item.getLabelName的选项,并给出错误:错误CS1061'object'不包含'getLabelName'的定义,并且找不到接受'object'类型的第一个参数的扩展方法'getLabelName'。是否缺少使用指令或程序集引用?使用列表不需要向上/向下转换。发生了什么问题?使用列表而不是ArrayList。你可以通过铸造物品来解决问题,但如果你可以使用列表,为什么要铸造呢?同意Sinatr。使用列表可以直接访问当前项目的成员。使用ArrayList,您必须将每个项强制转换为DataPerLabel。Visual studio没有为我提供执行item.getLabelName的选项,并给出错误:错误CS1061'object'不包含'getLabelName'的定义,并且找不到接受'object'类型的第一个参数的扩展方法'getLabelName'。是否缺少使用指令或程序集引用?使用列表不需要向上/向下转换您只需通过在foreach中指定变量的类型来自动执行转换,就像在allData中指定foreachDataPerLabel项一样,即使在使用ArrayList时也是如此。尽管如此,列表还是更好您可以通过在foreach中指定变量的类型来自动执行强制转换,就像在allData中指定foreachDataPerLabel项一样,即使在使用ArrayList时也是如此。尽管如此,这个列表还是更好