0

XDocumentライブラリを使用してXMLドキュメントを読み取り、C#でLINQを使用してリストにクエリを実行しています。匿名のリストを暗黙の変数に返しています。任意のタイプは単純な構造です。何が間違っているのかわかりませんが、これをすでに定義したクラスのリストに戻したいのですが、この匿名タイプをカスタムクラスに変換するときにエラーが発生します。私はこれについて明らかな何かを見逃していますか?ここでは動的型付けを使用したくありません。

public class CustomClass
    {
        public string id { get; set; }
        public int fileName { get; set; }
    }

XDocument optXML = XDocument.Load(pathName);

var optInput = (from item in optXML.Descendants("Group")
                    select new
                    {
                        id = (int)item.Attribute("ID"),
                        fileName = (string)item.Attribute("FileName")
                    }).ToList();
foreach (CustomClass item in optInput)
        {
            Console.WriteLine(item.id);
        }
4

4 に答える 4

4

new{}選択する代わりにnew CustomClass()

public class CustomClass
    {
        public string id { get; set; }
        public int fileName { get; set; }
    }

XDocument optXML = XDocument.Load(pathName);

var optInput = (from item in optXML.Descendants("Group")
                    select new CustomClass()
                    {
                        id = (int)item.Attribute("ID"),
                        fileName = (string)item.Attribute("FileName")
                    }).ToList();
foreach (CustomClass item in optInput)
        {
            Console.WriteLine(item.id);
        }
于 2012-12-18T16:36:44.023 に答える
2

CustomClass匿名のオブジェクトではなく、に投影したいと思います

List<CustomClass> optInput = (from item in optXML.Descendants("Group")
                select new CustomClass 
                {
                    id = (int)item.Attribute("ID"),
                    fileName = (string)item.Attribute("FileName")
                }).ToList();

コードを次のように変更する特別な理由はありません。実際に得ているものを示すためvarに、コードを変更しただけです。List<CustomClass>

于 2012-12-18T16:37:01.393 に答える
1

varカスタムタイプの代わりに使用できます。これは、プロジェクションでコンパイラによって生成されたタイプです。

foreach (var item in optInput)
{
     Console.WriteLine(item.id);
}

CustomClassまたは、匿名型を使用する代わりに、クラスのオブジェクトを作成できます。

  var optInput = (from item in optXML.Descendants("Group")
                select new CustomClass 
                {
                    id = (int)item.Attribute("ID"),
                    fileName = (string)item.Attribute("FileName")
                }).ToList();
于 2012-12-18T16:35:56.957 に答える
1

クエリ内で選択した匿名タイプがCustomClassではないため、このエラーが発生します。そのようにCustomclass自体を選択するだけです

    select new CustomClass { id = , fileName = }

または、foreach内でそのような匿名タイプを使用します

    foreach (var item in optInput) 
    { 
        Console.WriteLine(item.id); 
    }       

そして、あなたはそれのための完全なインテリセンスを得るでしょう。

于 2012-12-18T16:38:00.280 に答える