今日は.NETコーディングを行っていましたが、これまで考えていなかったことがありました。ネットワーク接続(ping、TCPソケットなど)をテストするためのMicrosoftの組み込みメソッドの多くは、例外を投げることについて非常にリベラルです接続が失敗した場合。コントロールフローにネットワーク例外を使用しても問題ありませんか?
もちろん、一般的なケースでは、プログラムの制御フローで例外を使用することは好ましくありません。でも、私は好奇心が強い - .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に設定しています。私は例外からすべての情報を捨てているので、基本的には例外をすべて飲み込んでいませんか?ここでベストプラクティスは何ですか?
*予想される例外からの回復*と処理できない状況を引き起こすことの違い*バブルアップ*。 'bool'だけでは正常な状態(成功、タイムアウト、無ルートなど)を取得できない場合は、返される情報を増やしてください。 –