C#打印包含多个值的ArrayList

时间:2015-04-09 20:49:54

标签: c# arraylist

我是ArrayList的新手。据我所知,ArrayLists每个元素(?)都可以包含多个值(请原谅我没有使用正确的术语)。

现在,问题是,如果我创建一个ArrayList,其中每个元素只包含一个值,我可以轻松打印它,但是如下例所示,如果我尝试创建一个ArrayList,其中每个元素包含多个值 - 我无法打印ArrayList中每个元素的值。 如果我尝试使用foreach或使用Console.Writeline进行循环(list [i]);我得到的只是命名空间。

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication13
{
class Register
{
    public string name;
    public string surname;

    public void RegisterData()
    {
        Console.Write("Enter your name: "); name = Console.ReadLine();
        Console.Write("Enter your surname: "); surname= Console.ReadLine();
    }

    public void PrintData()
    {
        Console.WriteLine("Name: " + name + " Surname: " + surname);
    }
}
class Program
{
    static void Main(string[] args)
    {

        ArrayList list = new ArrayList();

        Register temp = new Register();

        temp.RegisterData();

        list.Add(temp);

        for (int i = 0; i < list.Count; i++)
        {
            // How can I use the PrintData (without modifying it) method to print the ArrayList values?
        }
    }
}
}

如何在不使用PrintData方法的情况下打印ArrayList的值?

提前谢谢!

3 个答案:

答案 0 :(得分:4)

ArrayList是.NET 1.1的东西。您应该使用List代替。它是通用的,优于ArrayList

所以你定义你的列表

List<Register> list = new List<Register>();

...

list.Add(temp);

在foreach循环中,您可以访问Register类的属性。您也可以使用ArrayList执行此操作。但是你需要演员阵容。为什么不使用List然后......看起来更干净:

foreach (Register register in list)
{
    Console.WriteLine("Name: " + register.name + " Surname: " + register.surname);
    // or
    // register.PrintData();
}

答案 1 :(得分:2)

您正在向ArrayList添加Register实例。当您为其索引list[i]时,它将返回此实例。

当您尝试打印此实例时,实际上您正在调用此方法:Console.WriteLine(object),因为它最适合。此方法需要从您的对象获取一个字符串,因此它会在其上调用ToString()

ToString()的默认实现返回当前对象的命名空间和类型名称。在这种情况下,“WhateverYourBloodyNamespaceIs.Register”。

现在你知道你有一个Register类型的对象,你可以从中获取namesurname,正确格式化它们并将那些写入控制台。你有一个PrintData方法,使用它。

ArrayList不是通用的,因此您必须从object转换回Register。或者,做一个大男孩并使用List<Register>而不是2002年的ArrayList废话。

告诉你使用ArrayList的人正在玩弄你。

您需要通过C#获取CLR的副本。跳过前两章。开始阅读。走。跑。我不是在开玩笑。

答案 2 :(得分:1)

覆盖Register类中的ToString()方法,然后将'temp'变量传递给Console.WriteLine()方法。