C# 为什么VS2005调试器不报告;基础。”;正确的价值观?(是否为“为什么此if语句失败?”)

C# 为什么VS2005调试器不报告;基础。”;正确的价值观?(是否为“为什么此if语句失败?”),c#,.net,debugging,visual-studio-2005,breakpoints,C#,.net,Debugging,Visual Studio 2005,Breakpoints,我正在处理一个现有类,该类是从System.Windows.Forms.Combo box派生的两个步骤 该类重写文本属性,因此: public override string Text { get { return this.AccessibilityObject.Value; } set { if (base.Text != value)

我正在处理一个现有类,该类是从System.Windows.Forms.Combo box派生的两个步骤

该类重写文本属性,因此:

    public override string Text
    {
        get
        {
            return this.AccessibilityObject.Value;
        }
        set
        {
            if (base.Text != value)
            {
                base.Text = value;
            }
        }
    }
给出的“get”原因是MS错误:

然而,我更感兴趣的是“如果”不起作用

有时“base.Text!=value”为真,但按F10键直接进入“set”的结尾},并且文本属性没有更改

我在调试器中检查了值,并在其上设置了一个条件断点,只有当“if”语句的谓词为true时才会中断

“如果”到底怎么会出错

这个和ComboBox之间的类不涉及Text属性。上面的bug不应该真的影响到任何东西——它说它在VS2005中已经修复了。调试器显示的值是否与程序本身看到的值不同

更新

我想我已经发现这里发生了什么

调试器报告值不正确(包括错误计算条件断点)。要查看此信息,请尝试以下两个类:

class MyBase
{
    virtual public string Text
    {
        get
        {
            return "BaseText";
        }
    }
}

class MyDerived : MyBase
{
    public override string Text
    {
        get
        {
            string test = base.Text;
            return "DerivedText";
        }
    }
}
在最后一个return语句上放置一个断点,然后运行代码并访问该属性

在我的VS2005中,将鼠标悬停在base.Text上会给出值“DerivedText”,但变量test已正确设置为“BaseText”


所以,新的问题是:为什么调试器不能正确地处理base,我如何才能使它到达?

用于比较字符串。弦有微妙之处。我无法告诉您if失败的原因,除了字符串可能不是真正的“相等”之外。

用于比较字符串。弦有微妙之处。我不能告诉你为什么if会失败,除了你的字符串可能不是真正的“相等”

。。。我的新问题就要结束了。好吧。

。。。我的新问题就要结束了。啊,好的。

你能提供一个简单的、自包含的程序来演示这个问题吗?这种情况是否只发生在优化版本中,还是也发生在调试版本中?您使用的是什么版本的VS和.NET运行时?这是在VS2005中使用的.NET 2.0。它发生在调试版本中。稍后,我会将程序剥离到最基本的部分,如果它仍然存在,我会发布它。不幸的是,如果我将类复制到新项目中,则不会发生这种情况,因此我怀疑我是否会得到与我的特定类相关的答案:)但是,如果有人有指针指示调试器中看到的值与程序中看到的值不匹配,他们会;不客气。你能提供一个简单、独立的程序来演示这个问题吗?这种情况是否只发生在优化版本中,还是也发生在调试版本中?您使用的是什么版本的VS和.NET运行时?这是在VS2005中使用的.NET 2.0。它发生在调试版本中。稍后,我会将程序剥离到最基本的部分,如果它仍然存在,我会发布它。不幸的是,如果我将类复制到新项目中,则不会发生这种情况,因此我怀疑我是否会得到与我的特定类相关的答案:)但是,如果有人有指针指示调试器中看到的值与程序中看到的值不匹配,他们会;欢迎使用String.Compare获得相同的结果-调试器中的字符串值看起来相同,调试器中计算的String.Compare可以返回非零,但返回if语句(if(0!=System.String.Compare(base.Text,value)))似乎无法正常工作。使用String.Compare的结果相同-调试器中的字符串值看起来相同,调试器中计算的String.Compare可能返回非零,但if语句(if(0!=System.String.Compare(base.Text,value)))似乎无法正常工作。