我收到以下错误
Cannot implicitly convert type
'System.Collections.Generic.List<AnonymousType#1>' to
'System.Collections.Generic.List<string>'
我尝试阅读有关堆栈溢出的类似问题,但没有找到解决方案。 我的代码如下
var head =
from key in doc.Descendants("Header").Descendants("Article")
select new
{
value = (key.Value == String.Empty ?
from q in doc.Descendants("Header").Descendants("Article") select q.Value : from a in doc.Descendants("Header").Descendants("Article")
select a.Attribute("DefaultValue").Value)
};
List<string> hsourceFields = head.ToList();
如果xml节点的值为空,我将读取为该xml节点
指定的默认值<Header>
<Article>News</Article>
<Article DefaultValue ="Sport"></Article>
</Header>
我希望能够通过获取错误来返回我无法使用的List。
答案 0 :(得分:2)
您的代码看起来像是List<AnonType{value = List<string>}>
而不是List<string>
我认为你想要这样的东西将从文章中选择文本,或者如果它是空的,它将采用DefaultValue属性的值。请注意,如果没有文本且没有属性,则无法处理。
var head =
from key in doc.Descendants("Header").Descendants("Article")
select
string.IsNullOrEmpty(key.Value) ?
key.Attribute("DefaultValue").Value :
key.Value;
List<string> hsourceFields = head.ToList();
或者使用xpath和方法链的略微缩写的版本
var hsourceFields = doc.XPathSelectElements("/Header/Article")
.Select (x => string.IsNullOrEmpty(x.Value) ?
x.Attribute("DefaultValue").Value :
x.Value).ToList()
答案 1 :(得分:0)
如果您阅读错误,它会告诉您问题。您需要一个字符串列表,但是您有一个匿名对象列表。而是使用
var hSouceFields = head.ToList()
答案 2 :(得分:0)
我改变了读取xml节点的方式
var head = (from k in doc.Descendants("Header")
select k).ToList();
List<String> hsourceFields = new List<string>();
foreach (var t in head.Descendants("Article"))
{
if (t.Attribute("DefaultValue") != null)
{
hsourceFields.Add(t.Attribute("DefaultValue").Value);
}
else
hsourceFields.Add(t.Value);
}
虽然不以我的解决方案为荣。