Потому что
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch {
throw;
}
ничем не отличается от
File.Open("FileNotFound.txt", FileMode.Open);
Если вызов File.Open(string, FileMode)
завершится неудачно, то в любом из примеров одно и то же исключение попадет в интерфейс пользователя.
В указанном выше пункте catch
вы просто перехватываете и выкидываете исключение, ничего не делая, например, ведение журнала, откат транзакции, добавление исключения в исключение для добавления к нему дополнительной информации или что-либо еще.
Тем не менее,
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
GetLogger().LogException(ex);
throw;
}
не будет содержать никаких избыточностей, и ReSharper не должен жаловаться. Точно так же,
try {
File.Open("FileNotFound.txt", FileMode.Open);
} catch(Exception ex) {
throw new MyApplicationException(
"I'm sorry, but your preferences file could not be found.", ex);
}
не будет избыточным.