"儿童无法评估"检查重写的ToString()时

时间:2017-04-05 16:34:15

标签: c# visual-studio unity3d

我正在尝试在调试时检查List<T>的值,但是我得到了#34;孩子们无法评估&#34;如果T覆盖ToString(),则会出错。我正在使用VS2017并调试Unity3D 5.6.0f项目

示例代码:

void Start () {
   //if Sphere.ToString() is commented out, the contents are displayed correctly
   var obstacles = parser.ParseFile(Variables.Paths.DefaultScene).ToList();
}
//...
[System.Diagnostics.DebuggerDisplay("{ToString()}")]//with or without this attribute
public class Sphere
{
    public Vector3 Center { get; set; }
    public float Radius { get; set; }

    public override string ToString()
    {
        return "[r: " + Radius + " c: " + Center + "]";
    }
}

T是类还是结构似乎没有效果,DebuggerDisplay属性同样没有效果 - 无论如何都无法检查列表。在

var tmp = new Sphere();

然而正确显示tmp&#39; s ToString()。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

快速查看文档显示您应该使用自定义ToString()DebuggerDisplay属性。不是都。特别是如果DebuggerDisplay只是一个{ToString()}调用。

以下是提及此问题的文档段落:

  

如果类具有重写的ToString()方法,则调试器使用   重写方法而不是默认值{}。因此,如果你   已经重写了ToString()方法,调试器使用了   重写方法而不是默认值{},而你没有   必须使用DebuggerDisplay。如果同时使用两者,则调试器显示   属性优先于重写的ToString()方法。

来源:Using the DebuggerDisplay Attribute