从类列表打印有什么问题?

时间:2016-03-08 20:15:05

标签: c# list class

MyData data = new MyData { MyInt = 1, MyString = "Smith" };
MyData data1 = new MyData { MyInt = 3, MyString = "Wesson" };
MyData data2 = new MyData { MyInt = 2, MyString = "Colt" };
List<MyData> lst = new List<MyData>();
lst.Add(data);
lst.Add(data1);
lst.Add(data2);

Console.WriteLine("\nBefore sort:");
foreach (MyData MyInt in lst)
{
    Console.WriteLine((MyInt));
    Console.WriteLine(lst.ToString());
} 

刚刚为练习制作了简单的列表,但在输出中i有错误。 enter image description here

为什么这样表现出来?我期望得到它的内容。两种不同的方式给了我相同的结果。列表填充可能是我错了吗?

3 个答案:

答案 0 :(得分:5)

默认情况下,您的MyData类使用从ToString()继承的System.Object实现。该函数返回有关该类的非常通用的信息 - 几乎只是类名,以及有关任何泛型类型参数的一些有限信息。

如果您希望ToString()显示不同的信息,则需要自行覆盖:

public override string ToString() 
{
    return String.Format("{0} {1}", MyInt, MyString);
}

答案 1 :(得分:1)

MyInt将是对象MyData类型的MyInt - 属性的虚拟对象。MyDataMyData类是否覆盖ToString()?这就是Console.WriteLine在尝试编写对象时将要查找的内容 - 否则,它将使用Object中的默认值,这就是您所看到的内容。

你可能想要更像这样的东西:

Console.WriteLine("\nBefore sort:");
foreach (MyData myData in lst)
{
    Console.WriteLine(myData.MyInt);
} 

而是编写MyInt对象的MyData属性。

如果需要,可以在ToString类/结构中覆盖MyData方法,如下所示:

public override string ToString()
{
    return MyInt.ToString(); // assuming you just want to see the MyInt property...
}

答案 2 :(得分:0)

如果您希望输出每个MyData对象,那么您需要通过覆盖默认值来实现自己的ToString方法,这是您在上面看到的结果(仅显示对象引用)。您还应该将变量称为不同的变量。不要在for循环中使用MyInt。称之为像数据一样合理的东西。不要在你的班级前加上我的前缀。不好的做法。