为什么我无法创建对象实例?

Jac*_*ack 2 .net c# oop class

我需要添加对象列表,但我无法理解如何正确地做到这一点.我从控制台获得的每个新对象.怎么解决?

我的尝试:

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)

Sal*_*ari 5

首先,这将是最好创建一个ListCars,而不是名单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#中提供的等价物.