C# Can';t将数据设置到列表中,然后打印它。
我试图将数据存储到一个复杂的类型列表中,然后稍后再打印它。我试图使用属性,然后打印它,但似乎我遗漏了一些东西。请帮忙C# Can';t将数据设置到列表中,然后打印它。,c#,console,C#,Console,我试图将数据存储到一个复杂的类型列表中,然后稍后再打印它。我试图使用属性,然后打印它,但似乎我遗漏了一些东西。请帮忙 class Program { static void Main(string[] args) { Console.WriteLine("Enter Color"); string color = Console.ReadLine(); Console.WriteLine("Enter transmition
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);
}
}
类程序
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“输入颜色”);
字符串颜色=Console.ReadLine();
控制台。写入线(“输入传输”);
字符串传输=Console.ReadLine();
Console.WriteLine(“输入名称”);
字符串名称=Console.ReadLine();
List arr=新列表{};
DatabaseCar DatabaseCar=新的DatabaseCar(颜色、传输、名称);
arr.Add(databaseCar);
foreach(arr中的DatabaseCar数据)
{
控制台写入线(数据);
}
Console.ReadKey();
}
}
抽象类数据
{
保护字符串颜色;
保护字符串引擎;
受保护的字符串名称;
公共抽象空集(字符串颜色、字符串引擎、字符串名称);
公共字符串颜色
{
得到
{
返回颜色;
}
}
公共字符串引擎
{
得到
{
返回引擎;
}
}
公共字符串名
{
得到
{
返回名称;
}
}
}
类DatabaseCar:数据
{
公共覆盖无效集(字符串颜色、字符串引擎、字符串名称)
{
这个颜色=颜色;
这个。发动机=发动机;
this.name=名称;
}
公共数据库(字符串颜色、字符串引擎、字符串名称)
{
设置(颜色、引擎、名称);
}
}
我从中得到的结果是:
输入颜色:
红色
输入传输:
手册
输入名称:
约翰
ConsoleApp1.DatabaseCar这是因为
Console.WriteLine
在一个对象上调用ToString()
,而该对象的其他重载并不特别支持该对象<默认情况下,code>ToString()返回类型的字符串表示形式
要解决这个问题,您必须使用一个自定义实现覆盖ToString(),该实现可以满足您的需要
public override string ToString()
{
// construct the representation that you want and return it.
}
您的问题在于打印数据的方式
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();
}
然后您可以从main调用该方法,如下所示:
foreach (DatabaseCar data in arr)
{
PrintDatabaseCar(data);
}
选项二,您可以覆盖ToString()
方法,并提供打印类型为databaser
的对象的功能。此方法必须放入数据库car
类定义中
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;
}
}
明白了。
谢谢大家
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);
}
覆盖此功能