我需要添加对象列表,但我无法理解如何正确地做到这一点.我从控制台获得的每个新对象.怎么解决?
我的尝试:
namespace ExampleCars
{
public class Car
{
public string name;
public int speed;
public Car(string name, int speed)
{
this.name = name;
this.speed = speed;
}
}
class Program
{
static void Main(string[] args)
{
string name;
int speed, elements;
List<Object> cars = new List<Object>();
elements = Convert.ToInt32(Console.ReadLine());
if (elements > 0)
{
for (int i = 0; i < n; i++)
{
name = Convert.ToString(Console.ReadLine());
speed = Convert.ToInt32(Console.ReadLine());
Car newCar = new Car(name, speed);
cars.Add(newCar);
}
}
foreach (var oneCar in cars)
Console.WriteLine(oneCar);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在控制台中我得到这个(elements == 1):
ExampleCars.Car
Run Code Online (Sandbox Code Playgroud)
首先,这将是最好创建一个List的Cars,而不是名单Objects.所以改变这个:
List<Object> cars = new List<Object>();
Run Code Online (Sandbox Code Playgroud)
对此:
List<Car> cars = new List<Car>();
Run Code Online (Sandbox Code Playgroud)
如果你使用属性而不是字段,它也会很棒.最后,作为您的问题的解决方案,并根据您在上一个Console.Writeline方法中需要显示的内容,您可以覆盖该ToString方法.你的课应该是这样的:
public class Car
{
public string Name { get; set; }
public int Speed { get; set; }
public Car(string name, int speed)
{
Name = name;
Speed = speed;
}
public override string ToString()
{
return $"Name = {Name}, Speed = {Speed} ";
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是旧版本的C#:
return String.Format("Name = {0}, Speed = {1}", Name, Speed);
Run Code Online (Sandbox Code Playgroud)
它$被称为字符串插值,可从C#6 +获得.我已经提供了String.Format旧版本的C#中提供的等价物.