【问题标题】:Weird new instance creation syntax behaviour奇怪的新实例创建语法行为
【发布时间】:2012-12-05 22:46:25
【问题描述】:

我已经声明了一个属性来捕获当前页面的查询字符串。我还有一个与查询字符串变量具有相同属性名称的类。下面是我的调试环境,

   private Guid? ParishId
    {
        get
        {
            Guid guid;
            if (Guid.TryParse(Request.QueryString["id"], out guid))
            {
                return guid;
            }

            return null;
        }
    }

这是我期望 p.ParishId 拥有的,这是我在检查 p 对象时得到的

但它显示了查询字符串变量的值。我把鼠标放在 ParishId 上

为什么看不到新分配的 Guid?

【问题讨论】:

  • 您是否尝试过将私有更改为公共并查看它是否显示在调试器中
  • @DJKRAZE 我的意思是花括号内的p.ParishId 的值反映了 QueryString 的值,而不是我分配给它的新 Guid。查询字符串的 ParishId 很好。检查对象p 显示正确的值,但检查大括号内的ParishId 显示查询字符串值
  • 调试器的工作方式略有不同。当您将鼠标移到标识符上时,它将根据当前范围对其进行评估。当前作用域中唯一的ParishId 是从QueryString 获取它的类的属性。
  • @codingbiz 误会很抱歉

标签: c# asp.net .net visual-studio-debugging


【解决方案1】:

调试器根据当前范围调用您当前所在实例的属性。 p.ParishId - 是实例 p 的属性,ParishId - 是任何碰巧是范围的属性,在您的情况下是从 QueryString 获取值的类。

更新:

我不确定你想要什么参考。当您将鼠标移到标识符上时,调试器会执行与将该标识符添加到 Watches 列表时相同的操作,即在当前范围内解析它。在创建时分配实例的字段/属性的 C# 功能只是语言语法糖。要检查实例pParishId 属性,您需要评估p.ParishId 或在p 类的代码中。

【讨论】:

  • 您能否发布参考链接以确认您的答案?
  • @codingbiz - 什么,你不相信我:)?查看我的答案的更新。
猜你喜欢
  • 1970-01-01
  • 2021-02-12
  • 1970-01-01
  • 2012-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多