【问题标题】:ToString() on List<object> not working properly [duplicate]List<object> 上的 ToString() 无法正常工作 [重复]
【发布时间】:2015-04-05 22:06:14
【问题描述】:

我有这个代码

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 中,等效输出为:Path: [T13, Three, ETB]。

【问题讨论】:

  • 如果只是为了调试,DebuggerDisplay 属性很方便,但在这种情况下,它需要您的 List 实例的特殊化,该属性将存在于该实例上。 c-sharp-debugging-debuggerdisplay-or-tostring
  • 是的,只是为了调试,我会调查一下。

标签: c#


【解决方案1】:

尝试使用 StringBuilder

List<Vertex> path = k.getShortestPathTo(v);
StringBuilder str = new StringBuilder();

foreach(Vertex v in path){
    str.append(v);
}

Console.WriteLine("Path: " + str.ToString());

【讨论】:

    【解决方案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&lt;Vertext&gt; .
    2. 编写程序代码,检查这些对象的数据/状态并手动构造输出。

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-12
          • 2014-05-13
          • 2017-07-15
          • 2015-09-06
          • 2016-05-06
          • 2016-05-12
          • 2018-07-19
          • 2018-10-21
          相关资源
          最近更新 更多