C# 方法抛出错误而不是返回null。为什么?
我有时会出现错误:C# 方法抛出错误而不是返回null。为什么?,c#,C#,我有时会出现错误: There is not a header with name UserName and namespace http://www.website.com/ in the message. Stacktrace System.ServiceModel.Channel.MessageHeaders.GetHeader[T](字符串名称, 字符串ns,字符串[]演员) Common.Utilities.WCF.WcfCallContext.TryGetHeader(字符串键)
There is not a header with name UserName and namespace http://www.website.com/ in the message.
Stacktrace
System.ServiceModel.Channel.MessageHeaders.GetHeader[T](字符串名称,
字符串ns,字符串[]演员)
Common.Utilities.WCF.WcfCallContext.TryGetHeader(字符串键)
Common.Utilities.WCF.WcfCallContext.get_UserName()
以下是两种方法:
private static string TryGetHeader( string key )
{
try
{
return GetHeader( key );
}
catch
{
return null;
}
}
private static string GetHeader( string key )
{
var headers = OperationContext.Current.IncomingMessageHeaders;
var value = headers.GetHeader<string>( key, "http://www.website.com/", "Project" );
return value;
}
}
私有静态字符串TryGetHeader(字符串键)
{
尝试
{
返回GetHeader(键);
}
抓住
{
返回null;
}
}
私有静态字符串GetHeader(字符串键)
{
var headers=OperationContext.Current.IncomingMessageHeaders;
var value=headers.GetHeader(键,“http://www.website.com/“,”项目“);
返回值;
}
}
所以TryGetHeader(带有try和catch)正在调用GetHeader。
很明显,它会在以下方面中断:
var value = headers.GetHeader<string>( key, "http://www.website.com/", "Project" );
var value=headers.GetHeader(键)http://www.website.com/“,”项目“);
那么为什么TryGetHeader
没有将其捕获为错误,并且没有返回null
?
这就好像它在
GetHeader
中中断并停止,而不是在TryGetHeader
中返回错误一样。如果调用TryGetHeader
,则会捕获该异常。我强烈怀疑您看到了“第一次机会异常”,或者在IDE/调试器中看到了异常。这是一个幻影:异常实际上并不存在(或者更确切地说,它将在正常执行中被捕获)。尝试关闭IDE中的异常处理选项。看起来像是FindHeader
,然后(对于值>-1)应用索引操作将防止它抛出异常。您不应该编写依赖于抛出的特定异常的代码(特别是如果您捕获了所有异常,而不仅仅是预期的异常),您是否尝试过在不进行调试的情况下运行代码?错误实际上是由您自己的代码捕获/未处理的,还是仅显示在调试器中?Medinoc提出了一个公平的观点。这真的破坏了你的密码吗?