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