Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Sinclair, Вы писали:
S> Антон, а что смешного в
S>S>для not null reference нужны заглушки типам Node.EmptyNode
S>Опять же для первой ноды должно быть Previous = Node.EmptyNode, а для последней Next = Node.EmptyNode
S> Мы делаем защиту от null, поэтому
То, что мы не делаем защиту от null. Мы делаем защиту от логических ошибок.
Один из видов логических ошибок — недоинициализация. Проблема не в null, а в том, что нужное свойство не получает осмысленного значения. Замена одного бессмысленного значения на другое — это шило на мыло.
Более того, во многих случаях такая замена делает решение хуже. Потому, что ещё сильнее откладывает детектирование проблемы. Null вызывает NRE при первом же обращении, а Empty стрельнет вообще непонятно где. Скорее всего — при проверке
результатов работы, и то при условии достаточно внимательной проверки.
А мы хотим, чтобы ошибка обнаруживалась там, где она совершена. Соответственно, not null даст нам ошибку прямо там, где мы пытаемся засунуть null, да ещё и в компайл-тайм, а не при выполнении юнит-теста.
Empty такого преимущества лишён.
S> И продвинутый анализатор тоже будет ругаться на крайние узлы.
S>Мне больше нравится string.Empty так как в большинстве случаев приходится писать
S>S>string.IsNullOrEmpty(str)
S>
S>вместо
S>S>str.IsEmpty
S>
Во-первых, нет никакой разницы, что писать — IsNullOrEmpty или IsEmpty.
Если нам надо гарантировать, что в нужное место попадает URL файла, то ни null ни "" нас не устроят.