C # элегантный способ проверить, является ли свойство свойства нулевым - PullRequest
81 голосов
/ 12 августа 2010

В C # скажем, что вы хотите извлечь значение из PropertyC в этом примере, и ObjectA, PropertyA и PropertyB могут быть нулевыми.

ObjectA.PropertyA.PropertyB.PropertyC

Как я могу безопасно получить PropertyC с наименьшим количеством кода?

Прямо сейчас я бы проверил:

if(ObjectA != null && ObjectA.PropertyA !=null && ObjectA.PropertyA.PropertyB != null)
{
    // safely pull off the value
    int value = objectA.PropertyA.PropertyB.PropertyC;
}

Было бы неплохо сделать что-то более подобное (псевдокод).

int value = ObjectA.PropertyA.PropertyB ? ObjectA.PropertyA.PropertyB : defaultVal;

Возможно, еще больше рухнул оператор с нулевым слиянием.

EDIT Первоначально я сказал, что мой второй пример похож на js, но я изменил его на psuedo-код, поскольку было правильно указано, что он не будет работать в JS.

Ответы [ 21 ]

0 голосов
/ 12 августа 2010

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

class PropertyAType
{
   public PropertyBType PropertyB {get; set; }

   public PropertyBType GetPropertyBOrDefault()
   {
       return PropertyB != null ? PropertyB : defaultValue;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...