【问题标题】:C# Printing ArrayList Containing Multiple ValuesC# 打印包含多个值的 ArrayList
【发布时间】:2015-04-09 20:49:53
【问题描述】:

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

现在,问题来了,如果我创建一个每个元素仅包含一个值的 ArrayList,我可以轻松打印它,但是如下例所示,如果我尝试创建一个每个元素包含多个值的 ArrayList - 我无法打印 ArrayList 中每个元素的值。 如果我尝试使用 foreach 或 for 循环使用 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 的值?

提前谢谢你!

【问题讨论】:

  • 您在代码中的注释与您在代码下方提出的问题有冲突,您可能需要澄清一下。

标签: c# arraylist


【解决方案1】:

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();
}

【讨论】:

  • OP 想要使用 PrintData 方法,所以只需将其放入 foreach 循环中
  • 哦,一定是忽略了这一点。谢谢!
  • 现在我重新阅读它,他在代码中的评论说“//我如何使用 PrintData(不修改它)方法来打印 ArrayList 值?”但他在代码下方的问题与此冲突......我认为这只是一个错字。好答案
【解决方案2】:

您正在向 ArrayList 添加一个 Register 实例。当您对它进行索引时,list[i] 会返回此实例。

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

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

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

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

让你使用 ArrayList 的人是在捉弄你。

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 谢谢大家!我不知道 ArrayLists 已经过时了。肯定会使用 List 代替。
    猜你喜欢
    • 2021-01-20
    • 2014-12-11
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多