C# 嵌套的Try/Catch语句

C# 嵌套的Try/Catch语句,c#,.net,exception,C#,.net,Exception,我有一些使用Web服务的代码。与每次都从服务中检索会话密钥不同,我希望使用设置的会话变量尝试响应,如果出现403错误,则获取新会话密钥并重试 在我有限的头脑中,嵌套try/catch语句是有意义的,但我已经意识到必须有更好的方法。我在这里读过几篇文章,提到了诸如使用语句的lambda表达式和助手,但这些也可能是外星行星际科学给我的礼物 始终愿意学习我想知道是否有人有建议(与细节或链接到细节)?这里的一切都正常,我只是需要一种比嵌套try语句更好的方法(请和谢谢)。和往常一样,你们摇滚 publi

我有一些使用Web服务的代码。与每次都从服务中检索会话密钥不同,我希望使用设置的会话变量尝试响应,如果出现403错误,则获取新会话密钥并重试

在我有限的头脑中,嵌套
try/catch
语句是有意义的,但我已经意识到必须有更好的方法。我在这里读过几篇文章,提到了诸如使用语句的
lambda表达式
助手
,但这些也可能是外星行星际科学给我的礼物

始终愿意学习我想知道是否有人有建议(与细节或链接到细节)?这里的一切都正常,我只是需要一种比嵌套
try
语句更好的方法(请和谢谢)。和往常一样,你们摇滚

public string getMySessionkey
如果尚未设置会话密钥,则使用登录凭据转到服务器以获取会话密钥(所有其他查询都需要)

searchPacket=stringbuilder,带参数和会话密钥

if (Session["MySessionKey"] != null)
{
    sessionKee = Session["MySessionKey"].ToString();
}
else
{
    sessionKee = getMySessionkey(_cbE, _cbP);
    System.Web.HttpContext.Current.Session.Add("MySessionKey", sessionKee);
}

try
{
    mySearchResults = getResults(searchPacket.ToString());
    vbResultz += Server.HtmlEncode(mySearchResults) ;
}
catch (WebException wx)
{
    HttpWebResponse webresponse ;
    webresponse = (HttpWebResponse)wx.Response;

    switch (webresponse.StatusCode)
    {
       case HttpStatusCode.InternalServerError:
            ...
            break;

        case HttpStatusCode.Forbidden: // 403
            vbResultz = "You aint got no valid session key!";
          // code here to get a new session key and try again

            break;

        default:
            throw;
    }
}

使用发生次数有限的循环。一旦通话成功,就退出循环

var maxNumberOfTries = 3;
var currentTry = 0;
var success = false;

do
{
    currentTry += 1;

    // Try whatever here. If it works, set success variable to true

    if (success) break;
} while (currentTry <= maxNumberOfTries)

if (!success)
{
    // If code reaches here, whatever had to be done has been tried <maxNumberOfTries> times and did not work
}
var maxNumberOfTries=3;
var currentTry=0;
var成功=false;
做
{
currentTry+=1;
//试试这里的任何方法。如果有效,将success变量设置为true
如果(成功)失败;

}while(currentTry)很有魅力,thanx太多了。不过,我还是想了解lamba和helpers。@user116923我不太确定这对你解决这个特定问题有什么好处。
var maxNumberOfTries = 3;
var currentTry = 0;
var flag = false;

do
{
    currentTry += 1;

    try
    {
        mySearchResults = getResults(searchPacket.ToString());
        vbResultz += Server.HtmlEncode(mySearchResults) ;
        flag = true;
    }
    catch (WebException wx)
    {
        HttpWebResponse webresponse ;
        webresponse = (HttpWebResponse)wx.Response;

        switch (webresponse.StatusCode)
        {
           case HttpStatusCode.InternalServerError:
            ...
                flag = true;
                break;

            case HttpStatusCode.Forbidden: // 403
                vbResultz = "You aint got no valid session key!";
              // code here to get a new session key and try again

                break;

            default:
                throw;
        }
    }
    if (flag) break;
} while (currentTry <= maxNumberOfTries)

if (!flag)
{
    // If code reaches here, whatever had to be done has been tried <maxNumberOfTries> times and did not work
}