C# 试图打印列表中的值给我带来了“错误”;项目.游戏“;

C# 试图打印列表中的值给我带来了“错误”;项目.游戏“;,c#,C#,因此,我创建了这个列表,似乎创建得很好: List<Game> JoinLists = new List<Game>(); JoinLists.Add(new Game("Elf", 6)); JoinLists.Add(new Game("Angel", 10)); JoinLists.Add(new Game("Demon", 10)); JoinLists.Add(new Game("W

因此,我创建了这个列表,似乎创建得很好:

        List<Game> JoinLists = new List<Game>();
        JoinLists.Add(new Game("Elf", 6));
        JoinLists.Add(new Game("Angel", 10));
        JoinLists.Add(new Game("Demon", 10));
        JoinLists.Add(new Game("Wizard", 9));
        JoinLists.Add(new Game("Undead", 7));
        JoinLists.Add(new Game("Vampire", 9));
        JoinLists.Add(new Game("Troll", 6));
有人能解释为什么打印的项目是“Project.Game”吗?我还将这些存储在Game.cs中:

    private string _type;
    private int _strength;

    public Game(string charType, int strength)
    {
        this._type = charType;
        this._strength = strength;
    }

Console.WriteLine
调用对象的
ToString()
方法,以便将对象转换为字符串。您的
Game
类没有这样的方法,因此使用了它的基类实现
object.ToString()
有一个默认的实现,它只是简单地吐出类的名称

如果你想让你的
游戏
类在控制台上实际显示一些信息,你有两个选择

首先,在类中实现
ToString()
。例如:

public override string ToString() 
{
    return _type;
}
其次,根据需要将各个属性写入控制台:

Console.WriteLine(character.Type);
请注意,要使第二个选项成为选项,您需要实现一些公共属性。现在您有一对私有字段

Console.WriteLine(character);
此行隐式调用
character.ToString()您尚未定义的。由于您没有覆盖默认实现(如上所述),因此结果只是返回完全限定的类型名(在本例中为“Project.Game”

如果您想要一个特定的输出,可以覆盖
游戏的
ToString()
方法,创建一个专用于可打印输出的新方法,或者,与其直接尝试
写入线(角色)
,不如尝试记录角色的一些特定属性(我想举个例子,但您的所有财产都是私有的,因此无法按原样以这种方式访问)

重写
ToString()
如下所示:

public override string ToString() 
{
    return $"{_type} (str: {_strength})";
}

您必须在
Game
类中实现
ToString()
方法,就像这样

private string\u类型;
私人综合实力;
公共游戏(字符串图表类型,整数强度)
{
这个._type=charType;
这个。_力量=力量;
}
公共重写字符串ToString()
{
返回$“{u-type}{u-strength}”;
}
默认情况下,
Console.Writeline
使用对象的
ToString()
方法,在您的情况下,
Project.Game
会返回对象的类型
public override string ToString() 
{
    return $"{_type} (str: {_strength})";
}