null check in try catch

时间:2011-06-25 19:28:10

标签: c# .net if-statement try-catch

我的WCF服务方法中有一个try catch块,它包含对象的if检查。对象'objRequest'作为服务操作输入参数进入。这是代码:

try
{
    if (objRequest == null)
    {
        //the lines here dont execute even though objRequest is null
        ...
        ...
    }

    //remaining code here
}
catch
{
    ...
}

现在出现了奇怪的部分。如果我把它放在try块之外,那么if检查就可以了。

if (objRequest == null)
{
 //This 'if' check returns true when outside the try block and the line now executes.
  .....
  ....

}
try
{


    //remaining code here
}
catch
{
    ...
}

在此处剪裁图像以证明我在说什么。如果对象为null,为什么它进入else块? enter image description here

我觉得这很神奇,而且不是很好。我在这里缺少什么?

5 个答案:

答案 0 :(得分:3)

您的屏幕截图清楚地显示该对象不为null,因为您可以看到其属性的值。那些属性都是null,这让你感到困惑。

答案 1 :(得分:1)

似乎工作正常。

object objRequest = null;
try
{
    if (objRequest == null)
    {
        throw new Exception("details not recieved");
    }
    //remaining code here
}
catch (Exception e)
{
  Console.WriteLine("Exception");
}

修改

在截图中,您提供的对象不是null,只是其中的属性

答案 2 :(得分:1)

这就是异常投掷/处理的工作原理。

try
{
    throw new Exception();
    //remaining code
}
catch (SomeException)
{
    // the exception above will not be caught here
}
catch (Exception)
{
    // however it will be caught here
}
// code here will know nothing about the exception 

答案 3 :(得分:1)

这也应该有效:

try
{
    if (objRequest == null || default(HereGoesTheobjRequestClassName))
    {
        throw new ArgumentException("Here goes your custom exception message");
    }
}
catch (Exception)
{
    // Your catch block here
}

答案 4 :(得分:1)

问题中的示例代码未显示捕获了哪个特定的Exception类,以及catch块中发生了什么。也许您希望该方法抛出一个异常但是当它从try块中抛出时会被catch块捕获。但是,如果您从外部 try块中抛出异常,它将不会被捕获,并将被抛出该方法给调用者。