Я бы сказал, что это не нормально. Передача нулевого значения никогда не является хорошей практикой, и, по моему мнению, когда значение имеет нулевое значение, это должно быть исключением. Вы не всегда можете контролировать, как передаются ваши данные, и в этих случаях вам следует проверять наличие нуля на случай, если это может произойти. Однако, если у вас есть возможность управлять аргументами самостоятельно, вам следует перегрузить метод, вместо того, чтобы передавать значение null.
Рассмотрим следующий сценарий:
public string DoSomething(string a, string b)
{
// Returns something after a and b is processed.
}
В этом примере мы указываем, что a и b являются строками. Это объекты типа char [] или как бы вы ни хотели определить строку.
Передача нулевого значения в этом методе вообще не имеет смысла, так как мы ожидаем строки. Ноль - это ничто - это не пустая строка - это просто пустота.
Причина, по которой я говорю, что я не думаю, что лучше отправлять null
в метод, заключается в том, что для null
никогда не используется. Это просто пустота, оставленная там как заполнитель чего-то, что не удалось создать. Поэтому вызов метода выше, как это:
DoSomething ("что угодно", ноль) не имеет никакого смысла вообще.
Мы можем утверждать, что могли бы сделать что-то вроде этого:
/// <summary>
/// Does something with string a or b
/// </summary>
/// <param name="a">The first string. If it's null, nothing is done with it</param>
/// <param name="b">The second string. If it's null, nothing is done with it</param>
/// <returns></returns>
public string DoSomething(string a, string b)
{
// Returns something after a and b is processed.
}
Но это также делает код менее читабельным. Почему бы не сделать перегрузку DoSomething (строка a)? Или, может быть, рефакторинг метода полностью, поскольку он может что-то делать с a
и null
и по-прежнему возвращать допустимое значение. null
не является допустимым значением, поэтому результат операции, включающей null
в качестве аргумента, не должен возвращать действительное значение.
Это как использовать бесконечность в математике. В результате вы всегда получите бесконечность, если вы добавите / вычтите / умножите или поделите что-то с ним.
Ответственность
Это мои собственные мнения и ни в коем случае не «правильный» способ программирования. Но поскольку на этот вопрос нет правильного ответа, я буду практиковать свое право на свободу слова:)