我正在尝试在调试时检查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()
。我该如何解决这个问题?
答案 0 :(得分:0)
快速查看文档显示您应该使用自定义ToString()
或DebuggerDisplay
属性。不是都。特别是如果DebuggerDisplay只是一个{ToString()}
调用。
以下是提及此问题的文档段落:
如果类具有重写的ToString()方法,则调试器使用 重写方法而不是默认值{}。因此,如果你 已经重写了ToString()方法,调试器使用了 重写方法而不是默认值{},而你没有 必须使用DebuggerDisplay。如果同时使用两者,则调试器显示 属性优先于重写的ToString()方法。