Có cách nào tốt hơn để viết mã này mà không sử dụng goto
không? Nó có vẻ khó xử, nhưng tôi không thể nghĩ ra một cách tốt hơn. Tôi cần để có thể thực hiện một lần thử lại, nhưng tôi không muốn sao chép bất kỳ mã nào.Cách tốt hơn để viết lại logic mà không cần goto
public void Write(string body)
{
bool retry = false;
RetryPoint:
try
{
m_Outputfile.Write(body);
m_Outputfile.Flush();
}
catch (Exception)
{
if(retry)
throw;
// try to re-open the file...
m_Outputfile = new StreamWriter(m_Filepath, true);
retry = true;
goto RetryPoint;
}
}
xin lỗi, không thể cưỡng lại! http://xkcd.com/292/ – Joe
Luôn luôn có một cách tốt hơn để viết logic mà không có một goto. –
@McWafflestix: Tôi không đồng ý. Có một số trường hợp * rất hiếm khi sử dụng 'goto' trên thực tế tạo ra mã sạch hơn - phá vỡ vòng lặp lồng nhau là một ví dụ thường được trích dẫn (vì C# không có dấu ngắt như Java). Xem http://stackoverflow.com/questions/2542289/is-there-ever-a-reason-to-use-goto-in-modern-net-code để biết thêm. – Heinzi