Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:对象同时为null和notnull_C# - Fatal编程技术网

C#:对象同时为null和notnull

C#:对象同时为null和notnull,c#,C#,我有一些非常奇怪的行为。对象同时显示为null和notnull,并且跳过了一条语句。我可能是个白痴,但如果是我的错,我看不出来。我正在Windows7SP1操作系统上使用VisualStudio2008进行构建 public void ReadTrendData(OpcDriver opcDriver) { if (opcDriver != null) { int a = 1; } if (

我有一些非常奇怪的行为。对象同时显示为null和notnull,并且跳过了一条语句。我可能是个白痴,但如果是我的错,我看不出来。我正在Windows7SP1操作系统上使用VisualStudio2008进行构建

    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)而不是==并查看您得到了什么。如果类重写
=
=