列表在主要调用时不打印信息

时间:2015-11-03 12:39:03

标签: c# list

我有一个名为

的名单
private List<Car> Cars; //Car is another class

我想根据List&lt;中的信息创建一个新列表。汽车&gt;汽车使用参数指定从汽车列表中提取的年份范围,然后放入名为

的新列表中
private List<Car> getCars;

代码如下。请注意,它只是项目的一部分,因此并未提供所有代码。

    private List<Car> Cars;
    private List<Car> getCars;

    public List<Car> GetCars(int fromYear, int toYear) 
    {
        getCars = new List<Car> { };
            foreach (Car c in Cars)
            if (c.Year >= fromYear && c.Year <= toYear)
                getCars.Add(c);
        return getCars;
    }

我遇到的问题是,虽然在运行代码时没有出现错误但是新列表没有打印出来,而是打印出来了   System.Collection.Generic.List&#39; 1 [Lab__2.Car]

如何使其打印出列表的对象而不是上面的内容,任何帮助都会很棒。最后,我的讲师指出他希望格式化的方法

public List<Car> GetPrices(int year)
{
}

5 个答案:

答案 0 :(得分:2)

您所看到的是您直接在列表上打印时获得的输出。它不会自动打印内容,您必须自己打印每个项目。

答案 1 :(得分:0)

您肯定会直接在列表上调用ToString()方法,但它只会打印其类型:

  

Object.ToString方法的默认实现返回对象类型的完全限定名称。 - MSDN

因此,您必须遍历列表中的项目并打印它的详细信息。例如:

foreach (Car c in Cars) {
     Console.WriteLine(c.Name); //I do not know what properties you have in the class Car. Change accordingly.
}

或者您可以使用String.Join()

String.Join(Environment.NewLine, Cars); //You can change 'Environment.NewLine' to ", " if you want a comma instead of a new line.

答案 2 :(得分:0)

尝试以下几点:

public Class Car
{   // guessing here
    public string Make { get; set; }
    public string Model { get; set; }
    public int Year { get; set; }

    public override string TosString()
    {
        return "Make: " + Make + ", Model: " + Model + ", Year: " + year;
    }

然后,在你的程序中的某个地方:

foreach(var car in CarList.Where(c => c.Year >= fromYear && c.Year <= toYear))
{ 
    Console.Out.WriteLine(car);
}

请注意GetCars()的功能如何在一个相当可读的Linq Where方法调用中表示。

答案 3 :(得分:0)

如@Ciara指定,您必须自己打印每个项目。当您在代码中发出Console.WriteLine(car)之类的内容时,Console类会自动调用Car对象上的ToString()方法。

MSDNToString()方法的文档指定:

  

ToString方法的默认实现返回Object [...]

类型的完全限定名称

在您的情况下,该名称为System.Collection.Generic.List'1[Lab__2.Car]。要更改ToString()方法返回的内容,请在Car类中重写方法:

public class Car
{
    public string Make { get; set; }
    public int Year { get; set; }

    public override string ToString()
    {
        return String.Format("Make: {0}, Year: {1}", Make, Year);
    }
}

之后您需要迭代列表并打印每个项目:

carList.ForEach(Console.WriteLine);

答案 4 :(得分:0)

您可以通过遍历它们来打印列表中的项目,并单独打印每个对象:

for (Car car in Cars)
{
    Console.WriteLine(car.ToString);
}

执行此Console.WriteLine(Cars)只会提供有关List对象的信息,通常是完整类型,也可能是内存中的地址,具体取决于运行时。

如果要在从方法中获取列表后打印列表中的项目,请执行以下操作:

for (Car car in GetCars(fromYear, toYear))
{
    Console.WriteLine(car.ToString);
}

当打印不是string(或其他字符序列)的对象时,您可能希望覆盖从Object继承的ToString方法,以指定对象的信息(或在这种情况下Car你要打印。