繁体   English   中英

在linq中处理null元素

[英]Handle null element in linq

我正在读取XML中的数据。 我遇到了一个值为null的问题,我不确定处理它的最佳方法。 下面是一段代码。 街道地址2在此XML中不存在,但在其他XML中不存在,因此我需要使其足够动态以处理两个实例。

var storeInfo = storeRows.Descendants("Store").Select(s => new
{
    storeName = s.Element("StoreName").Value,
    streetAddress1 = s.Element("StreetAddress1").Value,
    streetAddress2 = s.Element("StreetAddress2").Value
});
{
    foreach (var st in storeInfo)
    {
        alStoreName.Add(st.storeName.ToString());
        alStreet1.Add(st.StreetAddress1.ToString());
        alStreet2.Add(st.StreetAddress2.ToString());
    }
}

使用显式强制转换而不是访问Value属性

var storeInfo = storeRows.Descendants("Store").Select(s => new
{
    storeName = (string)s.Element("StoreName"),
    streetAddress1 = (string)s.Element("StreetAddress1"),
    streetAddress2 = (string)s.Element("StreetAddress2")
});

如果该元素不存在,则将返回null

另外,我建议您创建一个class来封装商店信息,而不是将信息存储在不同的列表中。 然后只需要一个storeInfo列表而不是匿名类型列表:

var storeInfo = storeRows.Descendants("Store").Select(s => new StoreInfo
{
    storeName = (string)s.Element("StoreName"),
    streetAddress1 = (string)s.Element("StreetAddress1"),
    streetAddress2 = (string)s.Element("StreetAddress2")
});

您应该使用(string)XElement显式(string)XElement而不是Value属性。 当元素不存在时,它将返回null

streetAddress2 = (string)s.Element("StreetAddress2")

您可以将XElement为上面的大多数基本类型, stringDateTimeGuidNullable<T> 请在此处查看完整列表: XElement类型转换

同样的规则适用于XAttribute

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM