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