XElement 显式运算符在 XElement 为 null 时抛出异常

问题描述 投票:0回答:1

XElement
具有可空值的显式运算符。对于示例
Nullable<Int32>

Microsoft 提供的示例似乎在

WriteLine
中容纳空值,但如果您提供空值,它会抛出
FormatException
,并且似乎只有在提供非空值时才有效。

XElement root = new XElement("Root",   
    new XElement("Value", null)  
);  
int? value = (int?)root.Element("Value");  
Console.WriteLine("Nullable integer: value={0}", value == null ? "null" : value.ToString());

Microsoft 提供的文档似乎表明

FormatException
仅应在以下情况下发生:

该元素不为 null,且不包含有效的 Int32 值。

我是否错过了一些明显的事情,或者这没有按设计工作?假设我没有错过任何东西,有没有一种方便的方法来处理可为空元素?目前我想出的最好的方法是:

int? value = Int32.TryParse((string)item.ElementOrException("Value"), out var tempVal) ? tempVal : default(int?);
c# .net linq-to-xml
1个回答
0
投票

根据文档

例外情况

FormatException
该元素不为 null 并且不包含有效的 Int32 值。

它的措辞方式,尽管有点模糊,意味着允许为 null 的是元素,而不是它的值。 事实上,通过查看

来源

public static explicit operator int?(XElement? element) { if (element == null) return null; return XmlConvert.ToInt32(element.Value); }

XmlConvert.ToInt32

 只需使用一些特定标志调用

int.Parse
所以,你可以说这是文档失败,但这是设计使然。

© www.soinside.com 2019 - 2024. All rights reserved.