我有一个名为
的名单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)
{
}
答案 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()
方法。
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);
答案 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
你要打印。