如何输出列表项的成员?

时间:2014-12-08 16:03:24

标签: c#

我是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文档。但是:(

4 个答案:

答案 0 :(得分:3)

您有一个对象列表。 object类没有这些成员(NumberDestination)。如果您想访问它们,您需要将对象转换为您的类型,或者列出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对象存储在一起,但是我想不出有什么理由去做我最喜欢的事情。