Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;“无法对儿童进行评估”;检查重写的ToString()时_C#_Visual Studio_Unity3d - Fatal编程技术网

C# &引用;“无法对儿童进行评估”;检查重写的ToString()时

C# &引用;“无法对儿童进行评估”;检查重写的ToString()时,c#,visual-studio,unity3d,C#,Visual Studio,Unity3d,调试时,我试图检查列表的值,但是如果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).ToL

调试时,我试图检查
列表的值,但是如果
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
是class还是struct似乎都没有任何效果,
DebuggerDisplay
属性同样没有效果-无论如何都无法检查列表。

var tmp = new Sphere();

但是,正确显示
tmp
ToString()
。如何解决此问题?

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

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

如果类具有重写的ToString()方法,则调试器将使用 重写的方法,而不是默认的{}。因此,如果你 如果重写了ToString()方法,调试器将使用 重写方法而不是默认的{},并且您不需要 必须使用DebuggerDisplay。如果两者都使用,则调试程序将显示 属性优先于重写的ToString()方法


来源:

如问题中所述,是否有
DebuggerDisplay
对任何情况都没有影响。尝试检查列表时始终会生成“无法计算子项”。您是否尝试删除ToString()并将其添加到标题中<代码>[System.Diagnostics.DebuggerDisplay(“[r:{Radius}c:{Center}]”)
您找到问题的解决方案了吗?我从System.Dynamic.DynamicObject派生的类也遇到了类似的问题。DebuggerDisplay按预期工作。但是我在watch视图中扩展实例的子对象时出现错误“Children cannot be evaluation”,这会使调试器崩溃(调试停止)。我猜这可能和你的原因一样。(虽然我没有使用统一,所以我认为你的问题也与统一无关)。@sboisse不,遗憾的是没有。Unity中的调试仍然存在问题(尽管在以后的版本中似乎没有那么严重)。IEnumerable不可用,其他非数组集合偶尔工作。通过在必要时打印到控制台来学习如何使用它。很确定问题来自统一,更确切地说是它所使用的单后端-还有其他理论吗?不幸的是,我没有统一的经验。然而,当我意识到在自定义DynamicObject的一个重写方法中有一个意外的递归调用时,我修复了我的问题。因此,当VS2017试图在监视面板中显示我的动态对象的内容时,可能是堆栈溢出导致崩溃。在修复递归之后,一切都按预期工作。因此,如果您的问题只发生在您自己的一个自定义实现上,而不是发生在其他实现上,那么可能与我的问题类似。