如何获得属性值的最低值和最高值?
<parent>
<anothertag value="20" />
<body>
<monitor value="3" />
<mouse value="5" />
<chair>
<monoblock value="5" />
</chair>
</body>
</parent>
这是我的代码
string xml = "<parent>" +
"<anothertag value=\"20\"/>" +
"<body>" +
"<monitor value=\"3\"/>" +
"<mouse value=\"5\"/>" +
"<chair>" +
"<monoblock value=\"5\"/>" +
"</chair>" +
"</body>" +
"</parent>";
XDocument doc = XDocument.Parse(xml);
Console.WriteLine("value: " + doc.Descendants().ToList().Attributes("value").Min());
但我有错误说
At least one object must implement IComparable
答案 0 :(得分:1)
您必须将每个属性值解析为int:
Console.WriteLine("value: " + doc.Descendants().ToList().Attributes("value").Select(a => int.Parse(a.Value)).Min());
答案 1 :(得分:1)
试试这个:
Console.WriteLine("value: " + doc.Descendants().Max(x => x.Attribute("value") == null ? 0 : (int)x.Attribute("value")));
答案 2 :(得分:1)
如果您需要获取一个特定属性的最高值和最低值,那么在O(n)中实现该值的最佳方法之一是使用Aggregate
扩展方法:
var minMax= doc.Descendants()
.Where(e=>e.Attribute("value")!=null)
.Aggregate(new {
Min = int.MaxValue,
Max = int.MinValue
},
(seed, o) => new
{
Min = Math.Min((int)o.Attribute("value"), seed.Min),
Max = Math.Max((int)o.Attribute("value"), seed.Max)
}
);