Ваш вопрос некорректен, так как в вашем примере нет сбрасываний. Вместо этого он называет переменную Exception
_
и все равно должен выдать то же предупреждение для неиспользуемой переменной. Посмотрите этот пример SharpLab и посмотрите предупреждение и .locals init
сгенерированного IL.
.locals init (
[0] class [System.Private.CoreLib]System.Exception
)
Правильный способ "отбросить" исключение - перехватить только тип :
try {
DoSomething();
} catch (Exception) {
//...
}
Это не объявляет локальную переменную, которую вы можете проверьте по приведенной выше ссылке, просто стерев _
и просмотрев обновленный раздел .locals init
(подсказка: его больше нет).
Так как это перехватывает базовый тип исключения, вы также можете переписать его следующим образом:
try {
DoSomething();
} catch {
//...
}
Обратите внимание, что это , как правило, плохая идея, чтобы поймать все / поймать базовый Exception
тип.
Вернемся к исходному запросу: ни в одном из этих сценариев не наблюдается прироста производительности ios. В лучшем случае переменная удаляется, но true сброс - это просто syntacti c сахар, и переменная по-прежнему объявляется. Этот код:
int.TryParse("1", out _);
все еще включает локальную переменную типа int
. Вы можете увидеть это, просмотрев тот же раздел IL .
.locals init (
[0] int32
)
Но опять же, прирост производительности отсутствует.