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());
}
为什么这样表现出来?我期望得到它的内容。两种不同的方式给了我相同的结果。列表填充可能是我错了吗?
答案 0 :(得分:5)
默认情况下,您的MyData
类使用从ToString()
继承的System.Object
实现。该函数返回有关该类的非常通用的信息 - 几乎只是类名,以及有关任何泛型类型参数的一些有限信息。
如果您希望ToString()
显示不同的信息,则需要自行覆盖:
public override string ToString()
{
return String.Format("{0} {1}", MyInt, MyString);
}
答案 1 :(得分:1)
MyInt
将是对象MyData
类型的MyInt
- 属性的虚拟对象。MyData
。 MyData
类是否覆盖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。称之为像数据一样合理的东西。不要在你的班级前加上我的前缀。不好的做法。