You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C#调试器Dynamic View节点在自定义DynamicDictionary类正常工作?

调试DynamicDictionary时Dynamic View报错的解决方法

问题场景

  • 实现了DynamicDictionary类:继承DynamicObject并实现IDictionary<string, object?>接口,支持以属性访问的方式操作字典键
  • 调试时出现异常:
    • 展开Dynamic View节点时报错:

      Unable to evaluate the expression. Operation not supported. Unknown error: 0x80070057

    • Results View可正常展开
    • 移除InnerObject的[DebuggerBrowsable(DebuggerBrowsableState.Never)]特性后,InnerObject的Dynamic View能正常显示

原因分析

尽管DynamicObject实现了IDynamicMetaObjectProvider接口,但调试器的Dynamic View需要明确获取动态成员的名称集合才能正确渲染。默认的GetDynamicMemberNames实现未返回字典的键集合,导致调试器无法解析动态成员,进而抛出错误。

解决方案

重写DynamicObject的GetDynamicMemberNames方法,返回内部字典InnerObject的键集合:

public override IEnumerable<string> GetDynamicMemberNames()
{
    return InnerObject.Keys;
}

修改后,调试器可通过该方法获取所有动态成员(即字典键),正常渲染Dynamic View节点,同时也能保留InnerObject的[DebuggerBrowsable(DebuggerBrowsableState.Never)]特性,避免调试视图中显示冗余的内部对象。

内容的提问来源于stack exchange,提问作者Igor Levicki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 06:24:16