我的xml:
<Configuration>
<LaunchDebugger>false</LaunchDebugger>
<RequestFolder>./Request</RequestFolder>
<ResponseFolder>./Response</ResponseFolder>
<Countries>
<Country NumericCode="1FH" FileName="file1.xml">1</Country>
<Country NumericCode="20H" FileName="file2.xml">2</Country>
<Country NumericCode="" FileName="file3.xml">3</Country>
</Countries>
</Configuration>
国家/地区类:
public class Country
{
public String Name { get; set; }
public String NumericCode { get; set; }
public String FileName { get; set; }
}
这是我使用LINQ创建对象的方式:
CountryList = (from filter in Configuration.Descendants("Countries").Descendants("Country")
select new Country()
{
Name = (string)filter.Value,
NumericCode = (string)filter.Attribute("NumericCode"),
FileName = (string)filter.Attribute("FileName")
}).ToList();
解析xml有效,我得到列表中的所有3个国家,但我还得到一个额外的空对象作为列表的最后一项。
知道为什么会这样吗?
答案 0 :(得分:4)
原因很简单 - List<T>
的默认容量等于4. Capacity获取或设置内部数据结构可以保留而不调整大小的元素总数。内部数据结构是一个简单的数组private Country[] _items
,最初的长度等于4.因此,第四个元素有保留的位置,在元素分配之前为空。但不要担心 - 如果你检查,元素数将是3
。
这是一张图片,显示公共(三项)和内部数据结构(容量大小数组)
答案 1 :(得分:1)
我们可以使用 TrimExcess 方法来减少与计数相匹配的容量,但如果您的元素少于4个,则无法使用,例如当前问题。
相关链接:
Capasity 方法 - http://msdn.microsoft.com/en-us/library/y52x03h2(v=vs.100).aspx
TrimExcess 方法 - http://msdn.microsoft.com/en-us/library/ms132207(v=vs.100).aspx
关于默认容量 - Default Capacity of List