我有这段代码
Console.WriteLine("Distance to " + v.ToString() + ": " + v.minDistance);
List<Vertex> path = k.getShortestPathTo(v);
Console.WriteLine("Path: " + path.ToString());
v,是一个Vertex,我制作的一个类,打印得很好。但路径最终输出:
“路径:System.Collections.Generic.List`1 [Campus.Vertex]”
校园是我的项目名称。我如何让它工作?在Java中,equivelant输出为:Path:[T13,Three,ETB]。
答案 0 :(得分:3)
尝试使用StringBuilder
List<Vertex> path = k.getShortestPathTo(v);
StringBuilder str = new StringBuilder();
foreach(Vertex v in path){
str.append(v);
}
Console.WriteLine("Path: " + str.ToString());
答案 1 :(得分:2)
这就是.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()
,否则您只会看到相同的行为。
基本上你有两个选择:
.ToString()
的类,以返回其数据/状态的有意义的字符串表示形式。然后在这些对象上调用.ToString()
。在这种情况下,Vertex
需要覆盖.ToString()
,而且包含Vertex
个对象集合的自定义包含类本身会覆盖.ToString()
,并且您将使用该List<Vertext>
包含类而不是{{1}}。答案 2 :(得分:0)
path
是类型列表&lt;&gt;这是一个类,因此导致.ToString
将指针吐出path
而不是Text
。
对于此解决方案,您需要创建一个迭代列表的函数,并override
Vertex
ToString
类中的方法,以返回Vertex
对象的格式。
答案 3 :(得分:0)
作为组合Vertex元素的另一种方法,您可以使用string.Join
method:
Console.WriteLine(string.Join(" | ", path));
第一个Argument是项目之间的分隔符,第二个参数是列表。为列表中的每个项调用ToString()
以获取字符串形式。