我收到以下错误:
无法隐式转换类型'System.Collections.Generic.List>'到'System.Collections.Generic.List
我的代码是:
class Check
{
public string Text { get; set; }
public List<Check> getxml()
{
XDocument xdoc = XDocument.Load(@"D:\Web Utf-8 Converter\Categories.xml");
var list = (from p in xdoc.Descendants("Categories")
select p.Elements("name"));
var listing = list.ToList();
return listing;
}
}
在我看来,这似乎是转换错误。但我不知道如何转换。请帮助。
谢谢。
答案 0 :(得分:2)
根据你的编辑,它应该是这样的:
return xdoc
.Descendants("Categories")
.SelectMany(_ => _.Elements("name"))
.Select(_ => new Check(_.Value))
.ToList();
注意,getxml
不应该是Check
类的实例方法。它应该至少是静态工厂方法。
答案 1 :(得分:1)
select语句返回System.Xml.Linq.XElement。您的方法的返回类型是List。这些都不一样。
你能做的是:
var list = (from p in xdoc.Descendants("Categories")
select new Check { Text = p.Elements("name").Value});
但是我觉得你的班级Check不应该读取xml并存储每个元素的结果。
你应该有一个“XmlParser”类,它有GetXml方法和一个保存信息的类“XmlValue”。即。
public class XmlValue
{
public System.Xml.Linq.XElement Element { get; set; }
public string Text
{
get
{
if(Element == null) return null;
return Element.Value;
}
}
}
public class XmlParser
{
public List<XmlValue> GetXml()
{
XDocument xdoc = XDocument.Load(@"D:\Web Utf-8 Converter\Categories.xml");
return xdoc
.Descendants("Categories")
.SelectMany(p => p.Elements("name"))
.Select(p => new XmlValue { Element = p });
.ToList();
}
}
void Main()
{
XmlParser parser = new XmlParser();
var list = parser.GetXml();
foreach(var el in list)
Console.WriteLine(el.Text);
}
答案 2 :(得分:0)
您将返回来自
的列表var list = (from p in xdoc.Descendants("Categories")
select p.Elements("name"));
但返回类型是List。 'System.Xml.Linq.XElement'不是'Check',你必须以某种方式提供转换。也许写一个构造函数给Check-class接受System.Xml.Linq.XElement,然后代替返回列表,你可以
return listing.Select(x => new Check(x)).ToList();