Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我能';不创建对象实例?_C#_.net_Class_Oop - Fatal编程技术网

C# 为什么我能';不创建对象实例?

C# 为什么我能';不创建对象实例?,c#,.net,class,oop,C#,.net,Class,Oop,我需要将对象添加到列表中,但我不知道如何正确执行。 我从控制台得到的每一个新对象。 如何修复它 我的尝试: namespace ExampleCars { public class Car { public string name; public int speed; public Car(string name, int speed) { this.name = name;

我需要将对象添加到列表中,但我不知道如何正确执行。 我从控制台得到的每一个新对象。 如何修复它

我的尝试:

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

首先,最好创建一个
汽车的
列表,而不是
对象的列表。因此,改变这一点:

List<Object> cars = new List<Object>();
如果您使用的是旧版本的C#:


$
称为字符串插值,可从C#6+获得。我已经使用
String.Format
提供了一个与之相当的方法,当您在控制台中编写Car对象时,在后台调用Car.ToString方法时,在旧版本的C#.

中可以使用该方法

Object.ToString是.NET Framework中的主要格式化方法。 它将对象转换为其字符串表示形式,以便 适合展示。Object.ToString的默认实现 方法返回对象类型的完全限定名

如果要更改对象的默认字符串表示形式,则必须重写该方法

   public class Car
    {
        public string name;
        public int speed;
        public Car(string name, int speed)
        {
            this.name = name;
            this.speed = speed;
        }

        public override string ToString()
        {
            return $"{name} {speed}";

        }
    }

Console.WriteLine,负责打印文本

控制台的情况下,WriteLine(string)
实际上返回字符串值; 在任何其他情况下,它尝试通过调用实例对象
.ToString()
方法将值转换为字符串

C#中的任何类型都继承自System.Object,因此,它具有方法。 通过使用继承,许多类型重写了实际继承的方法,并实现了它们对值作为字符串应该是什么样子的感知

通过使用和应用您自己的逻辑,可以很容易地做到这一点

测试代码

Person person = new Person { Name = "John", Age = 12 };
Console.WriteLine(person);
// Output:
// Person: John 12
所以你可能会问,为什么我会得到
示例cars.Car
?您得到了它,因为您没有实现自己对object.ToString方法的表示。因此,System.Object实现实际上是以字符串形式返回实例类型,这正是您得到的结果

System.Object.ToString()

System.Int32
通过将
1
的值更改为
“1”


而其他类型可以实现自己的。e、 g:
newdatetime(2018,12,31)可以返回“12/31/2018”

在这段代码中返回$“{name}{speed}”有问题;VS不理解symbol$和write,这需要“;“我不能理解你的观点。我已经测试过它,它在这段代码中工作,返回$”Name={Name},Speed={Speed}”时出现问题;VS不懂符号$和写,那个需要“@Jack OK”。它被称为字符串插值,可从C#6+获得。检查我的更新答案,我已经提供了一个与之相当的答案,它在旧版本的C#中可用。
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} ";
    }
}
return String.Format("Name = {0}, Speed = {1}", Name, Speed);
   public class Car
    {
        public string name;
        public int speed;
        public Car(string name, int speed)
        {
            this.name = name;
            this.speed = speed;
        }

        public override string ToString()
        {
            return $"{name} {speed}";

        }
    }
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }

    public override string ToString()
    {
        return "Person: " + Name + " " + Age;
    }
}
Person person = new Person { Name = "John", Age = 12 };
Console.WriteLine(person);
// Output:
// Person: John 12
public virtual String ToString()
{
    return GetType().ToString();
}