Console.WriteLine правильно обрабатывает пустую строку - PullRequest
5 голосов
/ 11 ноября 2010

Просто найдите, что Console.WriteLine может правильно обрабатывать null строку, например Console.WriteLine((string)null);

Можно ли предположить, что большинство библиотек классов обрабатывают нулевую ссылку правильно?

Ответы [ 4 ]

10 голосов
/ 11 ноября 2010

Нет.

Это полностью зависит от метода, который вы вызываете.См. Документацию MSDN для каждого метода о том, что ожидать при передаче null.

. Никогда не безопасно делать предположения о null при вызове API или библиотеки другого пользователя, особенно если у васего исходный код для использования в качестве ссылки.Всегда читайте документы.И если документы не говорят, код для защиты.

Однако методы библиотеки программируются таким образом, что, когда они не принимают null, они выдают исключение, сообщающее, что это недопустимый аргумент.

4 голосов
/ 11 ноября 2010

Ну ... Да.

Можно ожидать, что (почти) все классы будут правильно обрабатывать нулевые ссылки.

Однако я чувствую, что то, что вы подразумеваете под «правильно», не совпадает с тем, что имеет в виду автор класса.

Например, если вы попытаетесь открыть файл и передаете null для пути к открываемому файлу, он не завершится с ошибкой, он выдаст исключение.

Если это то, что вы имеете в виду под «обращаться правильно», то конечно. На самом деле, я надеюсь, что все классы обрабатывают нулевые ссылки правильно.

Но не ожидайте, что программа просто включится, как будто ничего не произошло.

0 голосов
/ 11 ноября 2010

Как правило, когда аргумент (не имеет значения, является ли строка или какой-либо другой тип) обязательным для выполнения чего-либо, метод обычно завершается с исключением, если этот аргумент равен нулю.

Пара примеров:

  1. Файлы .. не может открыть "нулевой" файл, поэтому -> ошибка.
  2. Parse -> не может разобрать "null", поэтому -> error. (Да, они добавили TryParse в 2.0)

С другой стороны, когда аргумент не требуется, метод обычно "глотает лягушку", когда он нулевой, и обрабатывает его как некоторое значение по умолчанию, например, пустую строку. В случае метода WriteLine объекта Console на самом деле не нужна строка, он просто записывает ее в консоль, поэтому ему все равно, является ли она нулевой.

Так что, как говорили другие, это зависит от того, какой метод вы пытаетесь использовать, и вам лучше прочитать, прежде чем пытаться передать нулевые значения.

0 голосов
/ 11 ноября 2010

Это полностью зависит от того, что вы подразумеваете под «правильно» и от самого метода. Если вы не имеете в виду «мог выдать исключение, потому что он ожидал фактическую строку», то нет.

...