我是C#和.NET的新手。 所以,我有一个包含对象的集合
private List<object> trains = new List<object>();
...
trains.Add(trains[0]);
trains.Add(trains[1]);
trains.Add(trains[2]);
trains.Add(trains[3]);
trains.Add(trains[4]);
稍后在我的代码中我必须输入我的集合的所有元素 我尝试过类似的东西,但它不起作用
public void Display()
{
...
for (int i = 0; i<trains.Count; i++)
{
Console.WriteLine(trains[i].Number);
Console.WriteLine(trains[i].Destination);
}
}
请帮帮我,我真的不明白如何将它输入控制台。我阅读了有关&#34; List&#34;的Microsoft文档。但是:(
答案 0 :(得分:3)
您有一个对象列表。 object
类没有这些成员(Number
和Destination
)。如果您想访问它们,您需要将对象转换为您的类型,或者列出Train
而不是object
。
答案 1 :(得分:2)
目前您正在将对象存储在List<object>
中,因为您的类(可能已命名) Train
继承自Object
,您可以存储 object
中的对象。您需要List<Train>
,然后您可以访问每个成员属性,如:
private List<Train> trains = new List<Train>();
如果你出于某种原因可以这样做,那么你必须明确地将你的对象转换为Train
,如:
Console.WriteLine(((Train)(trains[i])).Number);
答案 2 :(得分:2)
假设这个
class Train
{
public int Number { get; set; }
public string Destination { get; set; }
}
你正在做这样的事情:
var t1 = new Train();
t1.Number = 1;
t1.Destination = "somewhere";
var t2 = new Train();
t2.Number = 2;
t2.Destination = "somewhereelse";
trains.Add(t1);
trains.Add(t2);
您可以使用此输出:
Train train;
foreach(object t in trains)
{
if ((train = t as Train) != null)
{
Console.WriteLine(t.Number);
Console.WriteLine(t.Destination);
}
}
使用对象列表的好处是你可以放置&#34;任何东西&#34;那里。不仅仅是#34; Train&#34;。但正如@Chris指出的那样,foreach不会过滤,所以你必须自己过滤它。
答案 3 :(得分:0)
要直接访问Train对象,您需要在引用它的公开属性之前将通用对象强制转换为Train对象。这可以在飞行中完成,没有必要在这里声明额外的变量myTrain,但为了清晰和可读性,我通常会这样做。
public void Display()
{
...
for (int i = 0; i<trains.Count; i++)
{
Train myTrain = (Train)trains[i];
Console.WriteLine(myTrain.Number);
Console.WriteLine(myTrain.Destination);
}
}
其他人已经提到并且我同意,我可以想到你需要使用的极少数情况:
List<object>();
而不是:
List<Train>();
唯一突然出现在我身上的事情就是如果你可能将同一列表中的非Train对象与Train对象存储在一起,但是我想不出有什么理由去做我最喜欢的事情。