使用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()并捕获异常。但是我认为这不是很干净。
答案 0 :(得分:3)
int? myInt = new [] { "", "123", "Foo", "456" }
.Select(s => int.TryParse(s, out int i) ? (int?)i : null)
.FirstOrDefault();
您可以使用三元运算符?
和TryParse
分别为有效和无效的整数字符串返回可为null的int或null。