【问题标题】:Nullable types using linq to xml使用 linq to xml 的可空类型
【发布时间】:2018-08-21 09:52:02
【问题描述】:

使用 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() 并捕获异常。但在我看来,这并不是很干净。

【问题讨论】:

  • 能否扩展最后一个Select 以在适用的情况下返回空值?
  • @SNO 如果您找到问题的解决方案,您应该在上面添加答案,而不是更新您的问题。你可以回答你自己的问题;-)

标签: c# linq nullable


【解决方案1】:
int? myInt = new [] { "", "123", "Foo", "456" }
        .Select(s => int.TryParse(s, out int i) ? (int?)i : null)
        .FirstOrDefault();

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多