Есть ли более чистый способ установить это анонимное свойство класса? - PullRequest
1 голос
/ 09 ноября 2010

Я возвращаю анонимный класс:

var clients = from c in this.ClientRepository.SearchClientByTerm(term, 10)
    select new
    {
       id = c.Id,
       line1 = c.Address.Line1 ?? "Unknown Information ..."
    };

Проблема в том, что Адрес обнуляем, что означает, что если он равен нулю, он взрывается в миллион частей.

Самым элегантным решением, которое я мог придумать, было это ...

    line1 = c.Address != null && c.Address.Line1 != null 
               ? c.Address.Line1 : "Unknown Information ..."

Есть ли лучший способ? Мне не нравится терять возможность использовать оператор нуль-слиянияа затем нужно проверить, если ноль.

Ответы [ 3 ]

1 голос
/ 09 ноября 2010

Я мог думать только об этом:

line1 = c.Address.HasValue ?  c.Address.Line1.HasValue ? c.Address.Line1 : "Line1 unknown." : "Address unknown."

Вы также можете изменить свой метод Address get get {} для проверки содержимого и возврата соответствующего значения, желательно кешировать результаты, чтобы он не запускалодна и та же проверка снова и снова.

1 голос
/ 09 ноября 2010

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

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

Я бы ClientRepository.SearchClientByTerm() вернул инициализированный Address и (возможно) установил Line1 там.

...