2010-10-28 8 views
1

У меня есть следующий код на C#, и я понятия не имею, почему он не работает (я получаю ошибку NullReferenceException). Если я определяю Recipe как новый List(), все начинает работать нормально.C# XML ToList внутри ToList

foreach (XElement element in document.Descendants("vegetables")) 
     { 
      VegetablesList = (
       from vegetables in element.Elements() 
       select new FoodItem() 
       { 
        Name = (vegetables.Element("name") == null) ? null : vegetables.Element("name").Value.ToString(), 
        Bcg = (vegetables.Element("bcg") == null) ? null : vegetables.Element("bcg").Value.ToString(), 
        Info = (vegetables.Element("info") == null) ? null : vegetables.Element("info").Value.ToString(), 
        Recipes = (
         from recipes in element.Element("recipes").Elements() 
         select new Recipe() 
         { 
          Name = (recipes.Element("name") == null) ? null : recipes.Element("name").Value.ToString(), 
          Text = (recipes.Element("text") == null) ? null : recipes.Element("text").Value.ToString() 
         } 
        ).ToList() 
       } 
      ).ToList(); 
      VegetablesListBox.ItemsSource = VegetablesList; 
     } 

Благодарим за помощь!

+0

Какая строка кода дает вам нулевое исключение ссылки? –

+0

Почему вы повторно назначаете 'VegetablesList'' ItemsSource'? – AnthonyWJones

+0

BTW use 'Name = (string) recipes.Element (" name ")' это сделает ваш код намного проще для чтения. – AnthonyWJones

ответ

0

Моя догадка заключается в том, что element.Element("recipes") возвращает null, что означает, что элемент recipes не существует для этой итерации.

+0

Спасибо! Исправлено изменением элемента element.Element ("recipes"). Elements() to vegetables.Element ("recipes"). Elements() –

+0

Добро пожаловать. –

+0

Null - это боль в заднице в Linq для XML. Я постоянно борюсь с этим. –