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);
    }
覆盖此功能