使用 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 分别表示有效和无效的整数字符串。
使用 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 分别表示有效和无效的整数字符串。