2

XML ファイルから取得した値を解析しようとすると問題が発生します。toList()変数に格納されたいくつかの値を取得し、それらを変換して要約しvarたいと考えています。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);                             
    }
} 

現時点では、XML ファイルから 3 つの値を取得し、次のように保存しvar vikttjurarていますtvikt = int.Parse(h.Element("Vikt").Value)

うまくいかないようです。eto の値をtest(foreachループで)代入すると、次のエラーが表示されます。

タイプ 'AnonymousType#1' を 'int' に暗黙的に変換することはできません

だから私は(上記のコードでわかるように)しようとしましたが、それもうまくいかず、同じエラーが発生しますConvert e:.Int32System.InvalidCastException

匿名型からの解析を解決する方法を知っている人はいintますvar vikttjurarか?

4

2 に答える 2

4

すでに linq ステートメントで変換を行っており、単一のプロパティを持つ匿名オブジェクトを作成していますtvikt。今、あなたはそれを調べる必要があります:

    foreach (var e in vikttjurar)
    {

        test = e.tvikt;

    }

ところで、XElement型は(または)への明示的な変換をサポートしているため、Linq ステートメントでは次のことができます。Int32int

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

}...
于 2013-11-06T17:20:41.907 に答える
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
}
于 2013-11-06T17:20:32.973 に答える