2011-02-25 31 views
0

我無法得到這個工作。狀態字段在某些場合是空的,我試圖讓結果返回「 - 」,如果它是空的或不存在。空Linq值

var CusipFields = from c in xml.Descendants("LISTARRAY") 
            orderby c.Element("ASKYIELD").Value descending 
            select new BondData() 
            { 

             CUSIP = c.Element("CUSIP").Value, 
             Description = (string)c.Element("ISSUER").Value, 
             Maturity= c.Element("MATURITYDT").Value, 
             AskYield = float.Parse(c.Element("ASKYIELD").Value), 
             State = (string)c.Element("STATE").Value ?? "--" 
            } 
            ; 

這只是不想工作。我得到的錯誤是:

NullReferenceException未處理。 {「對象引用未設置爲對象的實例。」}

我知道它不存在。我認爲如果c.Element(「STATE」)的值爲?? "--"將返回「 - 」。

我可以訴諸修改聲明:

var CusipFields = from c in xml.Descendants("LISTARRAY") 
            orderby c.Element("ASKYIELD").Value descending 
            select c; 
foreach(var t in CusipFields) 
{ 
    switch(t.name) 
    { 
    } 
} 

但我認爲這是比較慢。而不是我想要的。

回答

4

使用此:中

State = (string)c.Element("STATE") ?? "--" 

代替

State = (string)c.Element("STATE").Value ?? "--" 

我的回答假設,你的問題是,該STATE元素缺失,不是空的。請告訴我,是否解決了您的問題。

+0

非常感謝。你能解釋爲什麼它以這種方式工作嗎?如果我將Element(c.element(「STATE」))傳遞給State作爲null,與傳遞也是null的元素值相比,爲什麼這會起作用? – Patrick 2011-02-25 16:01:21

+0

您的XML數據不包含「STATE」元素。因爲'c.Elemet(「STATE」)'會返回'null'。在那個'null'實例上,你試圖訪問'Value'屬性。這是行不通的。 – 2011-02-25 16:03:16

+0

有道理,工作起來,我只是假設它會將null識別爲null,而不管它是對象還是對象的值。 – Patrick 2011-02-25 16:04:50

0

您收到此錯誤不是因爲Value屬性爲空,而是因爲c.Element(...)爲空。您需要檢查所有Element()調用中的空值,並採取適當的措施以避免此錯誤。

1

我認爲這是因爲c.Element("STATE")爲空,而不是它的Value屬性。

嘗試:

(string)c.Element("STATE") != null? (string)c.Element("STATE").Value : "--";