【问题标题】:Evaluate dynamic property in watch window在监视窗口中评估动态属性
【发布时间】:2016-07-15 08:54:55
【问题描述】:

我正在为我的 API 编写一些系统测试。因为我想捕捉向后兼容性问题,所以我没有引用合同模型,而是使用动态。

在代码中,我可以窥探动态对象的属性;但是,如果我尝试在监视窗口中评估相同的表达式,则会失败并出现以下错误:

错误 CS1061:“对象”不包含 'productDefinitionId' 并且没有扩展方法接受第一个 可以找到“对象”类型的参数(您是否缺少指令 还是程序集参考?)

在快速观看/立即窗口中也是如此。我记得能够做到这一点,但我最近升级到了 VS2015,因此使用了新的 Roslyn 编译器(尽管我仍在使用 C# 5.0)——可能是这样吗?如果有,为什么?

更新:

public dynamic LastAddedOrEditedProduct { get; private set; }

private void SetProductResponse(HttpResponseMessage response)
{
    var result = response.Content.ReadAsStringAsync().Result;
    LastAddedOrEditedProduct = JsonConvert.DeserializeObject<dynamic>(result);
}

其中结果是类似 JSON 的

{
  "productDefinitionId": 222
}

【问题讨论】:

  • 检查表达式评估器的overview。当您在 watch\immidiate 窗口中编写表达式时,就会发生这种情况。
  • 你能贴出重现问题的代码吗?
  • @AlekseyL。 - 我已经更新了问题
  • 无法使用任何调试设置组合进行重现。 “我仍在使用 C#5”是什么意思?
  • @IvanStoev 我的目标仍然是 .NET Framework 4.5.1

标签: c# .net visual-studio-2015 visual-studio-debugging roslyn


【解决方案1】:

您必须使用.Value 然后继续下一个对象。

lastAddedProduct.Value.productDefinitionId

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2020-07-28
    • 1970-01-01
    • 2013-11-18
    • 2016-09-20
    • 2015-01-20
    相关资源
    最近更新 更多