我的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块?
我觉得这很神奇,而且不是很好。我在这里缺少什么?
答案 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块中抛出异常,它将不会被捕获,并将被抛出该方法给调用者。