我正在尝试用一些结构调试代码
struct VirtualArrayTest
{
private T[] Array;
private TypeCurrentArray CurrentArray;
private int StartPos;
private int FinPos;
public enum TypeCurrentArray
{
Main = 1,
Temp
}
....
}
我无法看到这些变量的当前值(类型为VirtualArrayTest
)。我收到消息“运行时无法评估此表达式”。如果在我的结构中,我有变量CurrentArray(枚举)。
我只能通过设置选项“使用托管兼容模式”来决定此问题。我确定这个问题了吗?
我不明白它与official documentation有关这个选项的关系如何? “默认调试引擎”和“旧版本”是什么意思?为什么“默认调试引擎”不支持检查这些类型的变量?
附加信息问题“不可能看到VirtualArrayTest类型变量的当前值”与结构中存在的CurrentArray(枚举)字段相关联。也可以通过其他方式决定(不设置“使用托管兼容模式”选项),替换当前创建和初始化结构的变体:
VirtualArray ArrayInitial;
ArrayInitial.CurrentArray = TypeCurrentArray.Main;
ArrayInitial.Array = arrInitial;
ArrayInitial.IndxStart = 0;
ArrayInitial.IndxLast = iNumElements - 1;
到任何一个:
`VirtualArray ArrayInitial = new VirtualArray(arrInitial, TypeCurrentArray.Main);`
或者通过显式获取字段ArrayInitial.CurrentArray的值(在第一次创建struct之后),例如它也可以工作:
var t = ArrayInitial.CurrentArray;
在第一次显式获取该字段的值后,VS2017 Debuger将正确显示该类型的所有变量的值(也没有设置选项“使用管理兼容模式”)。我不知道,它是一个Bug或功能。