我有以下代码。 CustomControlHelper通过反射生成对象的实例。在此阶段,我们不知道我们正在处理什么类型的对象。我们确实知道这将是CustomControl,但是我们不知道它是否实现任何特定的接口(interface)或是否扩展了任何其他类。下面的代码试图确定加载的控件是否实现IRichAdminCustomControl接口(interface)。

Object obj = CustomControlHelper.GetControl(cc.Id, cc.ControlClass);
if(obj != null)
{
    bool isWhatWeWant = (obj is IRichAdminCustomControl);
    return isWhatWeWant;
}

没关系,但是我注意到当我知道有一个实现IRichAdminCustomControl的对象时,表达式的计算结果为false。

好的,这真是很奇怪。如果我在调试时检查代码,则表达式的值为true,但是如果我立即让代码运行并检查结果,则表达式的值为false(我在下面附加了动画gif进行说明)。

以前有没有人遇到过这样的怪异现象,如果是这样,到底是什么原因造成的?

顺便说一句,我相信我正在使用的产品使用Spring.NET在CustomControlHelper中提供依赖项注入(inject)。

最佳答案

如果您使用的是Visual Studio 2010 SP1,则会遇到以下错误:

Misreporting of variable values when debugging x64 code

Microsoft在该页面上有一种解决方法:



请尝试以下解决方法:

bool isWhatWeWant = true;
isWhatWeWant &= (obj is IRichAdminCustomControl);
bool finalValue = isWhatWeWant; // this line should fix isWhatWeWant too in the debugger
return finalValue;

编辑:似乎VS2012在特定条件下也遇到类似的问题。

10-05 22:01