列表上的 ToString()<object> 无法正常工作



我有这个代码

Console.WriteLine("Distance to " + v.ToString() + ": " + v.minDistance);
List<Vertex> path = k.getShortestPathTo(v);
Console.WriteLine("Path: " + path.ToString());

v,是一个顶点,我做的一个类,打印得很好。但是路径最终输出:

"Path: System.Collections.Generic.List'1[Campus.Vertex]">

校园是我的项目名称。我如何让它工作?在 Java 中,等效输出为:路径:[T13, Three, ETB]。

尝试使用 StringBuilder

List<Vertex> path = k.getShortestPathTo(v);
StringBuilder str = new StringBuilder();
foreach(Vertex v in path){
    str.append(v);
}
Console.WriteLine("Path: " + str.ToString());
这就是

.ToString()所做的。 除非它被类重写,否则object的默认行为是仅返回类型的名称。 这就是你所看到的行为。

如果要打印出集合的元素

,请打印集合的元素:

List<Vertex> path = k.getShortestPathTo(v);
foreach (var x in path)
    Console.WriteLine(x);  // Maybe include some other information in the output

请注意,除非Vertex覆盖.ToString()否则您只会看到相同的行为。

基本上,您有两种选择:

  1. 创建覆盖.ToString()的类,以返回其数据/状态的有意义的字符串表示形式。 然后在这些对象上调用.ToString()。 在这种情况下,Vertex需要覆盖.ToString(),并且一些包含Vertex对象集合的自定义包含类本身将覆盖.ToString(),并且您将使用该包含类而不是List<Vertext>
  2. 编写过程代码来检查这些对象的数据/状态并手动构造输出。

>path是一个类型List<>它是一个类,因此.ToString吐出指向path的指针,而不是你想要的Text

对于此解决方案,您需要创建一个迭代列表的函数,并在类Vertex ToString override一个方法来返回Vertex对象的格式。

作为组合顶点元素的另一种方法,您可以使用 string.Join 方法:

Console.WriteLine(string.Join(" | ", path));

第一个参数是项目之间的分隔符,第二个参数是列表。 为列表中的每一项调用ToString()以获取字符串形式。

最新更新