したがって、メソッド内に次のコードブロックがあります: (すべての変数はローカルです)
// ...
try
{
if (postXml != null)
using (StreamWriter writer = new StreamWriter(req.GetRequestStream()))
writer.Write(postXml.ToString());
}
catch (WebException ex)
{
HttpWebResponse response = ex.Response as HttpWebResponse;
if (response != null)
result = HandleOtherResponse(response, out status);
else result = HandleBadResponse(ex.ToString(), out status);
}
catch (Exception ex)
{
result = HandleBadResponse(ex.ToString(), out status);
}
if (result == null)
{
try
{
HttpWebResponse response = req.GetResponse() as HttpWebResponse;
result = HandleOtherResponse(response, out status);
}
catch (WebException ex)
{
HttpWebResponse response = ex.Response as HttpWebResponse;
if (response != null)
result = HandleOtherResponse(response, out status);
else result = HandleBadResponse(ex.ToString(), out status);
}
catch (Exception ex)
{
result = HandleBadResponse(ex.ToString(), out status);
}
}
// ...
ご覧のとおり、2 つの try ステートメントは異なりますが、2 つの catch ステートメントのセットはまったく同じです。ここで同じことを繰り返さないようにする方法を考えてみましたが、大幅に遅くなったり、見栄えが悪くなったりしない方法は思いつきませんでした。誰かにアイデアがあるかどうか疑問に思っています。