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?);
根据文档:
例外情况
该元素不为 null 并且不包含有效的 Int32 值。FormatException
它的措辞方式,尽管有点模糊,意味着允许为 null 的是元素,而不是它的值。 事实上,通过查看
来源:
public static explicit operator int?(XElement? element)
{
if (element == null) return null;
return XmlConvert.ToInt32(element.Value);
}
XmlConvert.ToInt32
只需使用一些特定标志调用
int.Parse
。所以,你可以说这是文档失败,但这是设计使然。