List <object>上的ToString()无法正常工作</object>

时间:2015-04-05 22:06:15

标签: c#

我有这段代码

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]。

4 个答案:

答案 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(),否则您只会看到相同的行为。

基本上你有两个选择:

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

答案 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()以获取字符串形式。