使用 linq to xml 的可空类型

Nullable types using linq to xml

使用 LINQ-2-XML 读取 xml 文件我有一些可为 null 的值(如 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();

如果日期为空且 select 数组为空,linq returns 一个值而不是空值。参考我的示例,myInt 是 0 而不是 null (当我想将其存储在数据库中时,这是一个很大的区别)。

是否可以获取空值而不是 "defaults"?

目前我只使用 .First() 并捕获异常。但是在我看来这并不是很干净。

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

您可以使用三元运算符 ?TryParse 来 return 一个可为 null 的 int 或 null 分别表示有效和无效的整数字符串。