gpt4 book ai didi

c# - "is"表达式的结果在运行时返回 false,但在检查时返回 true

转载 作者:IT老高 更新时间:2023-10-28 13:55:13 24 4
gpt4 key购买 nike

我有以下代码。 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。

好的,这就是它变得非常奇怪的地方。如果我在调试时检查代码,表达式的计算结果为真,但如果我立即让代码运行并检查结果,它的计算结果为假(我在下面附上了一个动画 gif 来说明)。

enter image description here

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

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

最佳答案

如果您使用的是 Visual Studio 2010 SP1,我遇到了这个错误:

Misreporting of variable values when debugging x64 code

该页面上有一个解决方法,由 Microsoft 发布:

You can either set all projects to compile to x86, or create an intermediate initialised variable declaration to ensure the debugger reports the correct value of the variable being examined.

试试这个解决方法:

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

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

关于c# - "is"表达式的结果在运行时返回 false,但在检查时返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21105437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com