C# 为什么我的VS2008手表显示的数值不正确?

C# 为什么我的VS2008手表显示的数值不正确?,c#,visual-studio-2008,debugging,watch,C#,Visual Studio 2008,Debugging,Watch,我有一个字符串变量和一个字符串常量。两者应该是相同的值(我正在测试条件中的相等性)。两者的“正确”值应为“scl”。在调试过程中,如果我在每个对象上放置一个手表,在“本地”窗口中查看它们,或将鼠标悬停在它们上方,则显示的值为“sd”,这是类中不同常量的值(类中有许多其他常量和变量正确显示值)。如果我为所讨论的变量/常量值插入Debug.WriteLine(在与手表相同的范围内),输出窗口将打印每个变量/常量的正确值。就我的一生而言,我无法理解为什么会发生这种情况,或者如何纠正它。这是一个延迟加载

我有一个字符串变量和一个字符串常量。两者应该是相同的值(我正在测试条件中的相等性)。两者的“正确”值应为“scl”。在调试过程中,如果我在每个对象上放置一个手表,在“本地”窗口中查看它们,或将鼠标悬停在它们上方,则显示的值为“sd”,这是类中不同常量的值(类中有许多其他常量和变量正确显示值)。如果我为所讨论的变量/常量值插入Debug.WriteLine(在与手表相同的范围内),输出窗口将打印每个变量/常量的正确值。就我的一生而言,我无法理解为什么会发生这种情况,或者如何纠正它。

这是一个延迟加载的属性吗?我过去也遇到过类似的问题,我曾经做过类似的事情(可怕的做作的例子,但它可以)


我似乎已经通过更改常量的值,运行调试会话,然后将值更改回它应该的值来修复它。也许这清除了某种调试缓存


谢谢大家的帮助

你可能已经试过了,但我的第一个想法是,你试过重新启动VS吗?听起来你需要清理和重建你的项目。有些调试信息听起来不对劲。已经两个都做了。但是谢谢你的建议。你是用优化(/Ox)编译的吗?如果您这样做,那么在调试器中变量的值并不总是最新的。这是有意义的。然而,没有这样做。此外,其中一个错误值是常数,因此无法将该常数重新指定为正确的值。我想我知道发生了什么。常量的语义应该是,该值是永恒不变的。编译器假定常量永远不会更改,即使在程序集的版本之间也是如此。因此,当程序集B引用程序集a中的常量C时,编译器会将C的值嵌入到B中。如果随后更改a中的常量,B仍然具有原始值,直到重新编译B为止。如果希望该值是在运行时拾取的值,请改用属性或只读字段。
public ClassWithMoo
{
   private string moo;

   public string Moo
   {
      get
      { 
         if (String.IsNullOrEmpty(this.moo)) this.moo = "Baa";
         return this.moo; 
      }
      set
      {
         this.moo = value;
      }
   }
}

public ClassThatUsesMoo
{
    ClassWithMoo cow = new ClassWithMoo();

    // breakpoint here would show cow.Moo = "Baa" 
    // This is because the debugger/watch window will instantiate the property!

    someCodeHere();

    cow.Moo = "Moo"; 
    debug.WriteLine(cow.Moo); // outputs 'Moo' now that it has been set properly
}