我是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的值?
提前谢谢!
答案 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类型的对象,你可以从中获取name
和surname
,正确格式化它们并将那些写入控制台。你有一个PrintData
方法,使用它。
ArrayList不是通用的,因此您必须从object
转换回Register
。或者,做一个大男孩并使用List<Register>
而不是2002年的ArrayList废话。
告诉你使用ArrayList的人正在玩弄你。
您需要通过C#获取CLR的副本。跳过前两章。开始阅读。走。跑。我不是在开玩笑。
答案 2 :(得分:1)
覆盖Register类中的ToString()方法,然后将'temp'变量传递给Console.WriteLine()方法。