~> if [ -z $FOO ]; then echo "EMPTY"; fi EMPTY ~> FOO="" ~> if [ -z $FOO ]; then echo "EMPTY"; fi EMPTY ~> FOO="a" ~> if [ -z $FOO ]; then echo "EMPTY"; fi ~>
-z работает на неопределенные переменные также. Для различения неопределенное и определенный, Вы использовали бы вещи, перечисленные здесь или, с более четкими объяснениями, здесь .
Самый Чистый путь использует расширение как в этих примерах. Для получения всех опций проверяют раздел Parameter Expansion руководства.
Альтернативное слово:
~$ unset FOO ~$ if test ${FOO+defined}; then echo "DEFINED"; fi ~$ FOO="" ~$ if test ${FOO+defined}; then echo "DEFINED"; fi DEFINED
Значение по умолчанию:
~$ FOO="" ~$ if test "${FOO-default value}" ; then echo "UNDEFINED"; fi ~$ unset FOO ~$ if test "${FOO-default value}" ; then echo "UNDEFINED"; fi UNDEFINED
, Конечно, Вы использовали бы один из них по-другому, помещая значение, которое Вы хотите вместо 'значения по умолчанию' и использования расширения непосредственно, в подходящих случаях.
По проводу (WCF) разницы нет; те же данные будут отправлены.
В большинстве сценариев у клиента очень низкая заметная производительность между List
и T []
. Используйте List
- это намного проще сделать правильно (добавление и т. Д.). Если вы выполняете много привязок данных, BindingList
может быть полезным, но вы можете захотеть ограничить это моделью представления, а не бизнес-объектом. Это действительно требует дополнительных затрат (с событиями и т. Д.).
Редактировать: самая большая «стоимость производительности» - это время, которое вы потратите на борьбу с ней, чтобы добавить элементы в массивы (с изменением размера и стоимостью там -of); поэтому перейдите к List
и улыбнитесь ;-p