在main中调用时未打印出信息的列表

本文关键字:信息 列表 打印 main 调用 | 更新日期: 2023-09-27 18:20:25

我有一个名为的列表

private List<Car> Cars; //Car is another class

我想根据list<汽车>使用参数指定年份范围的汽车,从汽车列表中提取,然后放入名为的新列表中

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'1[Lab__2.Car]

在如何让它打印出列表的对象而不是上面的对象方面,任何帮助都会很好。最后,我的讲师已经明确表示,他希望该方法格式化为这样的

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

在main中调用时未打印出信息的列表

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

您肯定直接在List上调用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.

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

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)的信息。

尝试以下方法:

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()的功能是如何在应用于列表的可读性很强的LinqWhere方法调用中表达的。

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

MSDN上ToString()方法的文档指定:

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);