2013-11-06 8 views
2

У меня возникают проблемы при попытке проанализировать значения, которые я извлекаю из XML-файла. Я получаю несколько значений, хранящихся toList() в переменной var, и я хочу их преобразовать в Int32 и суммировать их. Вот метод я использую:C# - проанализировать анонимный тип до int32

public void ViktTjurar() 
{ 
    string år = TextBoxÅr.Text; 
    int test= 0; 
    int summa = 0; 
    XElement vikt = XElement.Load(path); 


    var vikttjurar = (from h in vikt.Descendants("älgrapport") 
         where (string)h.Element("år") == år && (string) 
         h.Element("typ") == "Tjur" 
         select new 
         { 
          tvikt = int.Parse(h.Element("Vikt").Value), 

         }).ToList(); 

    //List<int> vikter1 = new List<int>(); 
    foreach (var e in vikttjurar) 
    { 
     test = Convert.ToInt32(e);        
    } 
} 

На данный момент я получаю 3 значения из XML-файла, хранящиеся в var vikttjurar, и я думал, что я проанализирован их правильно с: tvikt = int.Parse(h.Element("Vikt").Value).

Кажется, что это не работает. При присвоении значения e к testforeach цикле) я получаю сообщение об ошибке сказав:

Cannot implicitly convert type 'AnonymousType#1' to 'int'

Так что я попытался Converte к Int32 (как вы можете увидеть в моем коде выше), но это не будут работать либо и Я получаю ту же ошибку: System.InvalidCastException.

Кто-нибудь знает, как решить синтаксический анализ от анонимного типа до int или, еще лучше, проанализировать И суммировать значения в var vikttjurar?

+0

отметить, что вы девушка поможет быстрее решить вашу проблему: D – VladL

+0

* Спасибо, что помогли девушке! * - не обманывайте: P (это говорит, что в вашем профиле не хватает надлежащего аватара \ * cough *) – ThiefMaster

+1

Вы почти наверняка просто не должны быть используя анонимный тип вообще. Просто выберите значение int напрямую, а не оберните его анонимным типом, который вам нужно просто развернуть. – Servy

ответ

2

Просто сделай это, у вас есть int разобран уже:

test = e.tvikt; 

Кроме того, вы могли бы упростить весь ваш код немного:

var vikttjurar = (from h in vikt.Descendants("älgrapport") 
        where (string)h.Element("år") == år && (string) 
        h.Element("typ") == "Tjur" 
        select int.Parse(h.Element("Vikt").Value)) 
       .ToList(); 

//List<int> vikter1 = new List<int>(); 
foreach (var e in vikttjurar) 
{ 
    test = e; // e is an int here 
} 
+0

Спасибо, что много!:) Эта проблема заняла у меня весь день и сотни испытаний и ошибок. Еще раз спасибо! – Tess

4

Вы уже сделали преобразование в вашем LINQ и создали анонимные объекты с одним свойством, tvikt. Теперь нужно просто посмотреть его:

foreach (var e in vikttjurar) 
    { 

     test = e.tvikt; 

    } 

BTW, то XElement тип поддерживает explicit conversion к Int32 (или int), так что в вашем заявлении Linq, вы можете:

...select new 
{ 
    tvikt = (int)h.Element("Vikt"), 

}... 
+0

Большое вам спасибо! :) оно работает! УРА! – Tess

+0

Используйте «отметьте как ответ» - кнопку галочки - чтобы отпраздновать правильно. – Pxtl

Смежные вопросы