Я просто пытаюсь получить более подробную информацию о том, как работают Исключения. Из MSDN страницы ArgumentOutOfRangeException Constructor (String) я нахожу записку: «Этот конструктор инициализирует свойство ParamName нового экземпляра с помощью параметра ParamName Содержание ParamName предназначено быть понятым людьми.»Определение конструктора ArgumentOutOfRangeException (String)
Что это означает? Обязательно, чтобы строковый ввод ArgumentException всегда соответствовал имени ввода определения метода? (т. Е. Двойное количество -> «сумма»)
Если это необходимо, было бы нелегко для обслуживания, что строка должна быть автоматически обновлена каким-либо образом, если метод ввода аргументов изменил имена?
Из MSDN модульного тестирования урока мы имеем следующий код:
public void Debit(double amount)
{
if (m_frozen)
{
throw new Exception("Account frozen");
}
if (amount > m_balance)
{
throw new ArgumentOutOfRangeException("amount");
//throw new ArgumentOutOfRangeException("whatever"); <-- this is my comment
//throw new ArgumentOutOfRangeException("what is the point?"); <-- this is my comment
}
if (amount < 0)
{
throw new ArgumentOutOfRangeException("amount");
}
m_balance -= amount;
}
Итак, если в какой-то момент имя входного аргумента метода изменяется, лучшей практикой для сопровождающих является также обновить строку Исключения. Разве это не склонно к ошибкам? – TasGeorg
Имеет смысл обновить строку, и да, это может быть подвержено ошибкам. В C# 6 для этой цели был добавлен оператор 'nameof'. Вы можете использовать его как в 'nameof (amount)'. –