C#:对象同时为null和notnull
我有一些非常奇怪的行为。对象同时显示为null和notnull,并且跳过了一条语句。我可能是个白痴,但如果是我的错,我看不出来。我正在Windows7SP1操作系统上使用VisualStudio2008进行构建C#:对象同时为null和notnull,c#,C#,我有一些非常奇怪的行为。对象同时显示为null和notnull,并且跳过了一条语句。我可能是个白痴,但如果是我的错,我看不出来。我正在Windows7SP1操作系统上使用VisualStudio2008进行构建 public void ReadTrendData(OpcDriver opcDriver) { if (opcDriver != null) { int a = 1; } if (
public void ReadTrendData(OpcDriver opcDriver)
{
if (opcDriver != null)
{
int a = 1;
}
if (opcDriver == null)
{
Exception ex = new Exception("Null OPC driver received by ReadTrendData()");
throw ex;
}
opcDriver对象已成功创建并传递到此方法。当我单步执行时,执行“inta=1”语句。然后,在下一个if块中,执行到达“throw ex”语句,而不执行上面创建ex对象的行。因此,ex为null,抛出null会给我一个访问冲突异常
你知道这里会发生什么吗
OpcDriver类的两个成员是一个15年前未经授权、不受支持的示例库中的类的实例,该示例库使用COM与OPC(OLE for Process Control)程序接口。我能想到的唯一一件事是,在图书馆的内部某个地方发生了一些奇怪的事情,但我想不出这怎么可能
谢谢。您应该尝试更新的visual studio版本。我在2008和2012版本上遇到了几乎相同的问题。这是一个VisualStudio编译时错误。您应该检查构建选项,如果您选择了“发布”模式,您应该检查回调试并重试。您应该在较新的visual studio构建上尝试。我在2008和2012版本上遇到了几乎相同的问题。这是一个VisualStudio编译时错误。您应该检查您的构建选项,如果您选择了“发布”模式,您应该检查回调试并重试。总之,问题的根源可能是错误的运算符重载(=和/或!=)。测试
if(Object.ReferenceEquals(opcDriver,null))
工作正常。总之,问题的根源可能是错误的运算符重载(=和/或!=)。测试
if(Object.ReferenceEquals(opcDriver,null))
工作正常。OpcDriver在哪里?是否重载了任何运算符?是否有正确的.pdb和源代码?也许这值得一试:如果(!Object.ReferenceEquals(OpcDriver,null)){…}尝试使用Object.ReferenceEquals(null,OpcDriver)而不是==并查看您得到了什么。如果类重写
=
和=代码>运算符奇怪的是,您可以看到这种行为。OpcDriver
在哪里?它是否重载了任何运算符?您是否有正确的.pdb和源代码?也许这值得一试:如果(!Object.ReferenceEquals(OpcDriver,null)){…}尝试使用Object.ReferenceEquals(null,OpcDriver)而不是==并查看您得到了什么。如果类重写=
和=奇怪的是,你可以看到这种行为。