我今天正在做一些.NET编码,遇到了以前从未想过的事情-Microsoft的许多测试网络连接性的内置方法(ping,TCP套接字等)对于抛出异常非常自由,如果连接失败。
当然,在一般情况下,在程序的控制流中使用异常不是很好。不过我很好奇-如果.NET库很容易将它们抛出,我该如何避免这样的事情(请原谅可能是凌乱的代码,仅举一个例子):
bool TestConnection(string host)
{
bool connected;
Ping ping = new Ping();
PingReply reply = ping.Send(host);
connected = (reply.Status == IPStatus.Success);
return connected; // possibly won't return false because of exceptions
}
我可以使用
try-catch
块来处理异常,但是我要做的就是将connected
设置为false。从我丢弃异常中的所有信息以来,这是否基本上就完全吞噬了异常?最佳做法是什么?
最佳答案
您一定应该捕获.NET Framework引发的异常,并且不要假设唯一可以做的就是返回false,这取决于您的应用程序设计和用例,您可能会重新引发该异常并通知上层网络路径例如,输入的输入不再存在,或者在其他情况下返回false并忽略该问题。
.NET Framework是我们用来构建事物的基础,并且必须是通用的。如果您尝试打开一个不存在的文件,它会抛出FileNotFoundException,则在某些情况下您会创建它,而在其他情况下会告诉用户您找不到文件...它始终取决于您自己的代码,应采用防御性方法避免或捕获基本异常。 :)
关于.net - 是否可以将网络异常用于控制流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5007484/