我正在尝试将数据存储到复杂类型列表中,然后再打印。我正在尝试使用属性,然后打印它,但似乎我缺少了一些东西。请帮忙。
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Color");
string color = Console.ReadLine();
Console.WriteLine("Enter transmition");
string transmition = Console.ReadLine();
Console.WriteLine("Enter Name");
string name = Console.ReadLine();
List<DatabaseCar> arr = new List<DatabaseCar> { };
DatabaseCar databaseCar = new DatabaseCar(color, transmition, name);
arr.Add(databaseCar);
foreach (DatabaseCar data in arr)
{
Console.WriteLine(data);
}
Console.ReadKey();
}
}
abstract class Data
{
protected string color;
protected string engine;
protected string name;
public abstract void set(string color, string engine, string name);
public string Color
{
get
{
return color;
}
}
public string Engine
{
get
{
return engine;
}
}
public string Name
{
get
{
return name;
}
}
}
class DatabaseCar : Data
{
public override void set(string color, string engine, string name)
{
this.color = color;
this.engine = engine;
this.name = name;
}
public DatabaseCar(string color, string engine, string name)
{
set(color, engine, name);
}
}
我从中得到的结果是:
输入颜色: 红色 输入传输: 手册 输入名字: 约翰 ConsoleApp1.DatabaseCar
答案 0 :(得分:6)
这是因为Console.WriteLine
在对象的其他重载之一未专门支持的对象上调用ToString()
。默认情况下,ToString()
返回类型的字符串表示形式。
要解决此问题,您必须使用可实现所需功能的自定义实现覆盖ToString()。
public override string ToString()
{
// construct the representation that you want and return it.
}
答案 1 :(得分:0)
您的问题出在打印数据的方式上。
foreach (DatabaseCar data in arr)
{
Console.WriteLine(data);
}
data
是类型DatabaseCar
的实例,它是您定义的类。它包含许多不同类型的不同属性。因此,您需要告诉C#如何打印它。
有两种解决方法。一种是打印DatabaseCar
类型的对象的专用方法。您可以自定义打印方式,这是一个非常基本的示例。
static void PrintDatabaseCar(DatabaseCar car)
{
Console.WriteLine("Name : {0}", car.Name);
Console.WriteLine("Color : {0}", car.Color);
Console.WriteLine();
}
然后您可以像这样从主调用该方法:
foreach (DatabaseCar data in arr)
{
PrintDatabaseCar(data);
}
第二种方法,您可以覆盖ToString()
方法,并提供打印DatabasCar
类型的对象的功能。此方法必须包含在您的DatabaseCar
类定义中。
class DatabaseCar : Data
{
public override void set(string color, string engine, string name)
{
this.color = color;
this.engine = engine;
this.name = name;
}
public DatabaseCar(string color, string engine, string name)
{
set(color, engine, name);
}
public override string ToString()
{
string result = string.Empty;
result += string.Format("Name : {0}", name) + Environment.NewLine;
result += string.Format("Color : {0}", color) + Environment.NewLine;
result += Environment.NewLine;
return result;
}
}
答案 2 :(得分:0)
知道了。 谢谢大家
public override string ToString()
{
// construct the representation that you want and return it.
return String.Format("Color {0},Engine {1}, Name {2}",color,engine,name);
}