在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)
{
}
您看到的是当您直接在列表上调用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);