我有这样的代码,如果坏的结果遇到和在例外的情况下返回null:我该如何重构此代码以不返回null两次?
private JArray GetRESTData(string uri)
{
try
{
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 0))
{
var reader = new StreamReader(webResponse.GetResponseStream());
string s = reader.ReadToEnd();
return JsonConvert.DeserializeObject<JArray>(s);
}
MessageBox.Show(string.Format("Status code == {0}", webResponse.StatusCode));
return null;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return null;
}
}
...但它闻起来有点腐臭。有没有办法我可以重构这个不调用“返回null”两次?
添加最终块返回null那里,从删除这两个尝试和catch块 – Miller
不使用“使用块”任何理由webResponse.GetResponseStream()当你有一个不好的连接时,它会处理这个对象。 – ACS
这段代码有比两个'return null'更大的问题。它吃任意的异常,它将错误显示代码与业务逻辑混合在一起,它不会处理它的资源。在查看琐事之前解决大问题。 –