处理linq中的空元素
Handle null element in linq
我正在从 XML 中读取数据。我遇到了一个值为 null 的问题,我不确定处理它的最佳方法。下面是一段代码。 Street Address 2 不存在于此 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")
});
如果该元素不存在,这将 return 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
显式转换而不是 Value
属性。当元素不存在时它将 return null
streetAddress2 = (string)s.Element("StreetAddress2")
您可以将 XElement
转换为大多数基本类型,如上面的 string
、DateTime
、Guid
和 Nullable<T>
。在此处查看完整列表:XElement Type Conversions
同样的规则适用于 XAttribute
。
我正在从 XML 中读取数据。我遇到了一个值为 null 的问题,我不确定处理它的最佳方法。下面是一段代码。 Street Address 2 不存在于此 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")
});
如果该元素不存在,这将 return 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
显式转换而不是 Value
属性。当元素不存在时它将 return null
streetAddress2 = (string)s.Element("StreetAddress2")
您可以将 XElement
转换为大多数基本类型,如上面的 string
、DateTime
、Guid
和 Nullable<T>
。在此处查看完整列表:XElement Type Conversions
同样的规则适用于 XAttribute
。