c# - 将多个对象值从 Arraylist 写入控制台

标签 c# object arraylist console-application

我正在编写一个控制台应用程序,但在将所有对象属性值写入控制台时遇到了问题。我得到了一个包含所有属性的类,但我无法像处理普通列表那样访问它们。例如,一个普通的列表循环可能是这样的,带有属性示例 (carBrand) 和列表名称 Cars。

for (int i = 0; i < Cars.Length; i++)
{
     Console.WriteLine(Cars[i].carBrand)
}

但是对于 ArrayList 这似乎不起作用。这是为什么?我一直在四处寻找不同的方法,但没有从中得到任何好处...

代码:

static void Main(string[] args)
    {


        int menyval;
        ArrayList bilar = new ArrayList();
        Bil nybil = new Bil();
        string ägareefter;

        do
        {
            Console.WriteLine("\nVälkommen till Dimmans Bilrace!");
            Console.WriteLine("Vi har {0} bilar i race just nu.", nybil.IRace);
            Console.WriteLine("\nVälj något alternativ i menyn nedan, klicka sedan ENTER:");
            Console.WriteLine("\n1. Lägg till en bil först.");
            Console.WriteLine("2. Lägg till en bil sist.");
            Console.WriteLine("3. Lägg till en bil efter en annan bil.");
            Console.WriteLine("4. Visa alla bilar i listan.");
            Console.WriteLine("0. Avsluta programmet.");
            Console.Write("\nDitt val:");
            menyval = int.Parse(Console.ReadLine());

            switch (menyval)
            {
                case 0:
                    Console.WriteLine("Programmet kommer nu avslutas. Tryck på valfri knapp.");
                    Console.ReadKey();
                    break;
                case 1:
                    Console.WriteLine("\nLägg till en bil först. Skriv in det som efterfrågas och avsluta med ENTER.");
                    Console.WriteLine("Ange ägarens namn:");
                    nybil.Ägarnamn = Console.ReadLine();
                    Console.WriteLine("Ange tillverkarens namn:");
                    nybil.Tillverkarnamn = Console.ReadLine();
                    Console.WriteLine("Ange modellens namn:");
                    nybil.Modellnamn = Console.ReadLine();

                    bilar.Insert(0, nybil);
                    nybil.LäggTillBiliRace(1);
                    Console.WriteLine("Nu har bilen lagts till i racet. Klicka på valfri knapp för att fortsätta.");
                    Console.ReadKey();
                    break;

                case 2:
                    Console.WriteLine("\nLägg till en bil sist. Skriv in det som efterfrågas och avsluta med ENTER.");
                    Console.WriteLine("Ange ägarens namn:");
                    nybil.Ägarnamn = Console.ReadLine();
                    Console.WriteLine("Ange tillverkarens namn:");
                    nybil.Tillverkarnamn = Console.ReadLine();
                    Console.WriteLine("Ange modellens namn:");
                    nybil.Modellnamn = Console.ReadLine();

                    bilar.Add(nybil);
                    nybil.LäggTillBiliRace(1);

                    Console.WriteLine("Nu har bilen lagts till i racet. Klicka på valfri knapp för att fortsätta.");
                    Console.ReadKey();
                    break;

                case 3:
                    Console.WriteLine("\nLägg till en bil efter en annan bil. Skriv in det som efterfrågas och avsluta med ENTER.");
                    Console.WriteLine("Följande bilar har vi:");

                    for (int i = 0; i < bilar.Count; i++)
                    {
                        Console.WriteLine("[Bil " + i + ": " + "Ägare = " + ((Bil)bilar[i]).Ägarnamn + ", "
                           + "Tillverkare = " + ((Bil)bilar[i]).Tillverkarnamn + ", Modell = " +
                           ((Bil)bilar[i]).Modellnamn + "]");
                    }

                    Console.Write("\nAnge namnet på ägaren som du vill placera den nya bilen efter:");
                    ägareefter = Console.ReadLine();
                        break;

                case 4:
                    if (bilar.Count != 0)
                    {
                        Console.WriteLine("\nVisar alla bilar i listan:");

                        for (int i = 0; i < bilar.Count; i++)
                        {
                            Console.WriteLine("[Bil " + i + ": " + "Ägare = " + ((Bil)bilar[i]).Ägarnamn + ", "
                               + "Tillverkare = " + ((Bil)bilar[i]).Tillverkarnamn + ", Modell = " +
                               ((Bil)bilar[i]).Modellnamn + "]");
                        }
                    }
                    else
                    {
                        Console.WriteLine("\nListan innehåller inga bilar än. Klicka på valfi knapp för att komma till startmenyn");
                        Console.ReadKey();
                    }
                    break;

                default:
                    Console.WriteLine("\n Fel! Ange en siffra mellan de angivna värdena som finns. Tryck valfri knapp för att fortsätta.");
                    Console.ReadKey();
                    break;
            }
        } while (menyval != 0);
    }
}

类代码:

class Bil
{
    private string _ägarNamn;
    private string _tillverkarnamn;
    private string _modellnamn;
    private int _iRace;
    ArrayList billista = new ArrayList();

    public Bil()
    {
        _ägarNamn = "";
        _tillverkarnamn = "";
        _modellnamn = "";
    }

    public Bil(string ägarnamn, string tillverkarnamn, string modell)
    {
        _ägarNamn = ägarnamn;
        _tillverkarnamn = tillverkarnamn;
        _modellnamn = modell;
    }

    public string Ägarnamn
    {
        get { return _ägarNamn; }
        set { _ägarNamn = value; }
    }

    public string Tillverkarnamn
    {
        get { return _tillverkarnamn; }
        set { _tillverkarnamn = value; }
    }

    public string Modellnamn
    {
        get { return _modellnamn; }
        set { _modellnamn = value; }
    }

    public int IRace
    {
        get { return _iRace; }
        set { _iRace = value; }
    }

    public void LäggTillBiliRace(int i)
    {
        IRace += i;
    }

最好的问候。

最佳答案

ArrayList 是非泛型类型,因此其中的所有元素都是对象。 您应该首先转换 ArrayList:

foreach (var car in cars.Cast<Car>())
{
    Console.WriteLine(car.carBrand)
}

关于c# - 将多个对象值从 Arraylist 写入控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32870021/

相关文章:

javascript - 对对象数组中相似的键求和

java - 如何从datasnapshot中的recyclerview获取推送的id?

c# - 使用未分配的变量(字符串)

c# - 如果默认添加 DbContext 范围,为什么还要添加它?

C# 试图使标签(对象)从表单的一侧反弹到另一侧

ruby - 没有类方法获取 Ruby 类名

android - 具有优先级 ID 和日期时间的排序列表模型

java - 按对象方法的值对数组列表进行排序

c# - 如何在Windows Service中实现互斥

c# - Repeater 中的用户控件