2010-11-09 77 views
1

我返回一個匿名類:有沒有更清晰的方法來設置這個匿名類屬性?

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 ..." 

有沒有更好的辦法?我不喜歡失去能力使用空合併運算符,然後不得不檢查是否爲空。

+0

我使用poco的,所以我設置的地址,如果null。謝謝。 – 4imble 2010-11-09 15:09:53

回答

1

我能想到的唯一更清晰的方法是修改Address屬性的getter以永不返回null,或讓構造函數始終初始化Address。否則,你總是需要檢查null。

1

我只能想到這一點:

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

你也可以修改您的地址屬性get {}方法來檢查內容,並返回相應的值,最好是緩存結果,因此不會運行相同一遍又一遍地檢查。

+0

這是醜陋的編碼 – 2010-11-09 12:40:17

+0

醜陋或不醜,它是有效的。 – Skurmedel 2010-11-09 12:42:03

+0

我同意。加上1. – 4imble 2010-11-09 12:44:55

0

我會有ClientRepository.SearchClientByTerm()返回初始化Address和(可能)在那裏設置Line1

相關問題