使用linq to xml的可空类型

时间:2018-08-21 09:52:02

标签: c# linq nullable

使用LINQ-2-XML读取xml文件时,我有一些可为空的值(例如Int和DateTime?):

//First Example:
DateTime? date = element.XPathSelectElements("dateFrom")
                    .Where(i => DateTime.TryParse(i.Value, out DateTime dateFrom))
                    .Select(i => DateTime.Parse(i.Value))
                    .FirstOrDefault();

//Second Example
Int? myInt = element.XPathSelectElements("integer")
                    .Select(e => e.Value.ToString())
                    .Where(e => Int32.TryParse(e, out int tmpInt))
                    .Select(e => Int32.Parse(e))
                    .FirstOrDefault();

如果date为null且select-array为空,则linq返回一个值而不是null。以我的示例为例,myInt为0而不是null (当我要将其存储在数据库中时,有很大的不同)。

是否可以获取空值而不是“默认值”?

当前,我仅使用.First()并捕获异常。但是我认为这不是很干净。

1 个答案:

答案 0 :(得分:3)

int? myInt = new [] { "", "123", "Foo", "456" }
        .Select(s => int.TryParse(s, out int i) ? (int?)i : null)
        .FirstOrDefault();

您可以使用三元运算符?TryParse分别为有效和无效的整数字符串返回可为null的int或null。