无法将数据设置到列表中然后再打印。

时间:2018-07-10 15:54:38

标签: c# console

我正在尝试将数据存储到复杂类型列表中,然后再打印。我正在尝试使用属性,然后打印它,但似乎我缺少了一些东西。请帮忙。

    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

3 个答案:

答案 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);
    }