Свойства IEnumerable -- правильнее null или empty?
От: Shmj Ниоткуда  
Дата: 21.09.17 22:10
Оценка:
Емнип, есть правило что если метод возвращает пустой список -- то он должен быть не null а просто пустой.

Есть ли аналогичное правило для свойств?
Отредактировано 21.09.2017 22:12 Shmj . Предыдущая версия .
Re: FDG
От: Qbit86 Кипр
Дата: 21.09.17 22:13
Оценка: 22 (3) +3
Здравствуйте, Shmj, Вы писали:

S>Емнип, есть правило что если метод возвращает пустой список -- то он должен быть не null а просто пустой.

S>Есть ли аналогичное правило для свойсв?

«X DO NOT return null values from collection properties or from methods returning collections. Return an empty collection or an empty array instead.»
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/guidelines-for-collections
Глаза у меня добрые, но рубашка — смирительная!
Re[2]: FDG
От: Shmj Ниоткуда  
Дата: 22.09.17 13:04
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>«X DO NOT return null values from collection properties or from methods returning collections. Return an empty collection or an empty array instead.»

Q>https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/guidelines-for-collections

А вот интересно. Топовая (№1) либа Newtonsoft.JSON различает null и empty при сериализации/десериализации списков.

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

Т.е. если класс со списками участвует в сериализации -- то нужно отступить от правила с целью получения более читабельного документа, так как парадигма .Net о пустых списках не вписывается в парадигму JSON о необязательных элементах?
Re[3]: FDG
От: Слава  
Дата: 22.09.17 19:07
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Т.е. если класс со списками участвует в сериализации -- то нужно отступить от правила с целью получения более читабельного документа, так как парадигма .Net о пустых списках не вписывается в парадигму JSON о необязательных элементах?


Передача в JSON — это I/O. Там свои правила. Также, на передаваемый объект и на его коллекции могут быть навешены атрибуты наподобие JsonIgnoreIfNullOrEmpty
Re[3]: FDG
От: LWhisper  
Дата: 25.09.17 11:00
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Т.е. если класс со списками участвует в сериализации -- то нужно отступить от правила с целью получения более читабельного документа, так как парадигма .Net о пустых списках не вписывается в парадигму JSON о необязательных элементах?

В своём велосипеде я различаю null и пустые коллекции, но и те и другие сериализуются в виде одного флажка.
Если ты используешь JSON для сериализации данных, то, мне кажется, несколько лишних байт никак не скажутся на производительности.
А преобразовывать пустые коллекции в null и обратно себе дороже. Рано или поздно возникнет какой-нибудь баг, где ты будешь ловить Argument null exception в том случае, когда передаёшь пустой массив, а он при этом совершенно валиден.
Re[4]: FDG
От: Shmj Ниоткуда  
Дата: 25.09.17 17:17
Оценка:
Здравствуйте, LWhisper, Вы писали:

LW>В своём велосипеде я различаю null и пустые коллекции, но и те и другие сериализуются в виде одного флажка.


По идее в .Net вместо null все списки должны быть пустыми, даже если в исходном JSON-документе эти узлы отсутствуют.

Но как тогда отличать был ли в исходном JSON-документе узел пустым [] или отсутствовал вовсе?

LW>Если ты используешь JSON для сериализации данных, то, мне кажется, несколько лишних байт никак не скажутся на производительности.


JSON у меня в качестве конфигурационных файлов, как удобная альтернатива XML. Их редактируют вручную. А пустые узлы не удобны, лучше исключить их вообще из документа.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.