【问题标题】:Check for missing int value xml element检查缺少的 int 值 xml 元素
【发布时间】:2013-09-28 23:56:40
【问题描述】:

在我的 C# 程序中,我将汽车数据从 xml 文件加载到汽车对象中。

这是我的 xml 文件:

  <Car>
    <CarID>1</CarID>
    <CarName>Honda</CarName>
    <CarColor>Blue</CarColor>
  </Car>
  <Car>
    <CarName>Ford</CarName>
    <CarColor>Yellow</CarColor>
  </Car>
  <Car>
    <CarID>3</CarID>
    <CarName>BMW</CarName>
    <CarColor>Green</CarColor>
  </Car>

请注意,第二个汽车入口没有 ID。所以我需要检查这个以避免空异常。

我在我的 C# 代码中加载 xml 数据,如下所示:

      List<Car> Cars =
(
    from el in XDocument.Load("XML_Files/cars.xml").Root.Elements("Car")
    select new Car
    {
        CarID = (int)el.Element("CarID"),
        CarName = (string)el.Element("CarName"),
        CarColor = (string)el.Element("CarColor")
    }).ToList();

我在另一个问题中读到,为了解决这个问题,对于字符串数据,我们将其替换为:

CarName = (string)el.Element("CarName")

用这个:

CarName = ((string)el.Element("CarName") != null) ? (string)el.Element("CarName") : string.Empty

这适用于字符串值,但我不知道如何将此逻辑应用于 int 值。

那么我该如何修改这一行:

CarID = (int)el.Element("CarID")

要测试空值吗?

这个方法我试过了,还是不行:

CarID = ((int)el.Element("CarID") >= 0) ? Convert.ToInt32(el.Element("CarID").Value) : 0

有什么建议吗?

【问题讨论】:

    标签: c# xml int nullreferenceexception


    【解决方案1】:

    在您的两个示例中,您正在执行两个根本不同的检查。在string 示例中,您正在检查元素是否为null。在int 示例中,您假设它存在并直接跳转到检查整数值。首先检查它是否不是 null,就像您在 string 示例中所做的那样。

    CarID = (el.Element("CarID") != null) ? Convert.ToInt32(el.Element("CarID").Value) : 0;
    

    【讨论】:

    • 太好了。谢谢!
    猜你喜欢
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2014-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多