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提出了一个公平的观点。这真的破坏了你的密码吗?