我需要将对象添加到列表中,但是我不明白如何正确执行操作。 我从控制台获得的每个新对象。 如何解决?
我的尝试:
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);
}
}
}
在控制台中,我得到了这个(elements == 1
):
ExampleCars.Car
答案 0 :(得分:5)
首先,最好创建一个List
的{{1}},而不是Cars
的列表。所以改变这个:
Objects
对此:
List<Object> cars = new List<Object>();
如果您使用属性而不是字段,那就太好了。最后,作为问题的解决方案,并且根据您在最后一个List<Car> cars = new List<Car>();
方法中需要显示的内容,可以覆盖ToString
方法。您的课程应该是这样的:
Console.Writeline
如果您使用的是旧版本的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);
被称为字符串插值,可从C#6 +获得。我使用$
提供了等效功能,而C#的较早版本中提供了该功能。
答案 1 :(得分:1)
在控制台中编写Car对象时,将在后台调用Car.ToString方法。
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}";
}
}
答案 2 :(得分:1)
Console.WriteLine,负责打印文本。
如果Console.WriteLine(string)
实际上返回字符串值;
在任何其他情况下,它都会尝试通过调用实例对象 .ToString()
方法将值转换为字符串。
C#中的任何类型都继承自System.Object,因此具有.ToString()方法。 通过使用继承,许多类型将覆盖实际的继承方法,并实现其对值作为字符串的外观的认识。
使用method overriding并应用您自己的逻辑,即可轻松完成此操作。
示例取自MSDN
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
所以您可能会问,为什么我会得到ExampleCars.Car
?之所以得到它,是因为您没有实现自己的对象.ToString方法的表示形式。因此,System.Object实现实际上是将实例类型返回为字符串,这正是您所得到的。
System.Object.ToString()Source code。
public virtual String ToString()
{
return GetType().ToString();
}
System.Int32
通过将1
的值更改为"1"
来实现。
而其他类型可以自己实现。例如:new DateTime(2018, 12, 31) can return "12/31/2018"