0

我正在使用 XDocument 库读取 XML 文档,并在 C# 中使用 LINQ 查询列表。我将一个匿名列表返回到一个隐式变量中。anymous 类型是一个简单的结构。我不确定我做错了什么,但想将其返回到我已经定义的类的列表中,但在将此匿名类型转换为我的自定义类时出错。我是否错过了一些明显的东西。我不想在这里使用动态类型。

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{}select a 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 回答