C# LINQtoXML将空项添加到对象列表中
我的xml: 以下是我如何使用LINQ从中创建对象:C# LINQtoXML将空项添加到对象列表中,c#,xml,linq,C#,Xml,Linq,我的xml: 以下是我如何使用LINQ从中创建对象: public class Country { public String Name { get; set; } public String NumericCode { get; set; } public String FileName { get; set; } } 解析xml是可行的,我得到了列表中的所有3个国家,但我还得到了一个额外的null对象作为列表的最后一项 知道为什么会这样吗?原因很简单-列表的默认容
public class Country
{
public String Name { get; set; }
public String NumericCode { get; set; }
public String FileName { get; set; }
}
解析xml是可行的,我得到了列表中的所有3个国家,但我还得到了一个额外的null对象作为列表的最后一项
知道为什么会这样吗?原因很简单-
列表的默认容量等于4。获取或设置内部数据结构在不调整大小的情况下可以容纳的元素总数。内部数据结构是一个简单的数组private Country[]\u items
,它最初的长度等于4。这样就为第四个元素保留了一个位置,在分配元素之前该位置为空。但不要担心-如果您进行检查,元素计数将为3
这是一个图像,它显示了公共(三项)和内部数据结构(容量大小的数组)
原因很简单-列表的默认容量等于4。获取或设置内部数据结构在不调整大小的情况下可以容纳的元素总数。内部数据结构是一个简单的数组private Country[]\u items
,它最初的长度等于4。这样就为第四个元素保留了一个位置,在分配元素之前该位置为空。但不要担心-如果您进行检查,元素计数将为3
这是一个图像,它显示了公共(三项)和内部数据结构(容量大小的数组)
我们可以使用TrimOverse方法来减少容量以匹配计数,但如果您的元素少于4个,则这不起作用,如当前问题中所述
相关链接:
能力方法-
修剪多余部分方法-
关于默认容量的问题-我们可以使用TrimOverse方法来减少容量以匹配计数,但如果您的元素少于4个,则此方法无效,如当前问题中所述
相关链接:
能力方法-
修剪多余部分方法-
关于默认容量的问题-您不需要强制筛选.Value
为字符串
;仅强制过滤器
就足够了-(字符串)过滤器
(请参阅)。@ZevSpitz:感谢您指出这一点。您不需要强制过滤器。值
为字符串
;仅强制过滤器
就足够了-(字符串)过滤器
(请参阅)。@ZevSpitz:感谢您指出这一点。并且推测foreach
将忽略null
元素。@ZevSpitz实际上是foreach
枚举,直到达到大小。当然,您也可以将空元素添加到列表中,这不会被忽略。我的意思是,由于容量大小而包含的null
是列表的内部属性
?@ZevSpitz是,但它与计数
相同。“实际计数”只返回内部\u size
,该值在添加项目时增大,在删除项目时减小。并且推测foreach
将忽略null
元素。@ZevSpitz实际foreach
枚举,直到达到size
为止。当然,您也可以将空元素添加到列表中,这不会被忽略。我的意思是,由于容量大小而包含的null
是列表的内部属性
?@ZevSpitz是,但它与计数
相同。实际上,count只返回内部\u size
,当添加项目时,该值增加,当删除项目时,该值减少。
public class Country
{
public String Name { get; set; }
public String NumericCode { get; set; }
public String FileName { get; set; }
}
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();