Я хочу получить все IP-адреса своего компьютера. Если что-то пошло не так (исключение), я просто хочу вернуть пустую строку. Вот функция, которую я использую. GetHostEntry
забросит несколько исключений, и GetHostName
также выбрасывает исключение. Как я должен обрабатывать все эти исключения? Должен ли я поймать каждого из них один за другим? Это сделает код загроможденным. Или я должен просто использовать catch (Exception e)
и ничего не делать внутри блока catch
? Каков наилучший способ справиться с этим?Сколько исключений я должен уловить и каков правильный способ сделать это?
private string GetIpAddress()
{
var temp = new StringBuilder();
try {
var hostEntry = Dns.GetHostEntry(Dns.GetHostName());
var ips = from address in hostEntry.AddressList
where (address.AddressFamily == AddressFamily.InterNetwork)
select address;
foreach (IPAddress ip in ips) {
temp.Append(ip).Append(" ");
}
} catch (exception1) {
} catch (exception2) {
} .....
return temp.ToString();
}
@HovercraftFullOfEels и OP: вполне допустимо ничего не делать внутри блока Catch, пока вы ограничиваете область действия Try. Только игнорируйте исключения из кода, которые вам действительно не нравятся, если это удастся или нет. Иногда «не предпринимайте никаких действий» - это соответствующее действие. –
Случай в точке ... 'BlockingCollection .Take()' генерирует 'InvalidOperationException', когда коллекция завершена, и это контракт * only *, позволяющий определить, есть ли больше элементов. В этом случае хорошо иметь 'catch (InvalidOperationException) {}'. Однако это ситуация * только *, которая приходит в голову, когда я использовал пустой блок catch. –