代码之家  ›  专栏  ›  技术社区  ›  SNO

使用Linq to XML的可空类型

  •  0
  • SNO  · 技术社区  · 6 年前

    使用linq-2-xml读取XML文件时,我有一些可以为空的值(比如int?日期时间?):

    //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返回一个值而不是空值。参照我的例子 myInt 是0而不是空值 (当我想把它存储在数据库中时,有什么大的区别呢)。

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

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

    1 回复  |  直到 6 年前
        1
  •  3
  •   TVOHM    6 年前
    int? myInt = new [] { "", "123", "Foo", "456" }
            .Select(s => int.TryParse(s, out int i) ? (int?)i : null)
            .FirstOrDefault();
    

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