Null Linq Values - PullRequest
       12

Null Linq Values

0 голосов
/ 25 февраля 2011

Я не могу заставить это работать.Поле State в некоторых случаях пустое, я пытаюсь получить результат, возвращающий «-», если он пустой или не существует.

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)
    {
    }
}

Но я думаю, что это медленнее.И это не то, что я хочу.

Ответы [ 3 ]

4 голосов
/ 25 февраля 2011

Используйте это:

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

вместо

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

Мой ответ предполагает, что ваша проблема в том, что элемент STATE отсутствует, а не пуст.Скажите, пожалуйста, исправила ли это вашу проблему или нет.

1 голос
/ 25 февраля 2011

Я думаю, это потому, что c.Element("STATE") является нулем, а не значением свойства.

try:

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

0 голосов
/ 25 февраля 2011

Вы получаете эту ошибку не потому, что свойство Value равно нулю, а потому, что c.Element(...) равно нулю. Вам нужно будет проверять наличие нулей во всех ваших Element() вызовах и предпринимать соответствующие действия, чтобы избежать этой ошибки.

...