【问题标题】:How to convert empty string in int32? [duplicate]如何在 int32 中转换空字符串? [复制]
【发布时间】:2018-03-25 17:55:10
【问题描述】:

我正在开发从 html 表中获取数据的软件。所以这一行:

team.SelectSingleNode(".//td[@class='number total won total_won']")?.InnerText.Trim();

返回:""

(我正在使用 html 敏捷包进行 DOM 操作。)

完整的一行是这样的:

Convert.ToInt32(
  team.SelectSingleNode(
    ".//td[@class='number total won total_won']")
  ?.InnerText.Trim());

这会返回一个异常(格式不正确的异常)。

有办法解决这个问题吗?

【问题讨论】:

  • 如果它是一个空字符串,你希望它是什么值?实际上,空字符串不是有效的 int
  • @GiladGreen,如果没有值则该值为0
  • 似乎你可以用一个直接的“if”语句来解决这个问题......
  • var str = team.SelectSingleNode(".//td[@class='number total won total_won']")?.InnerText.Trim(); var number = str.IsNullOrWhiteSpace ? 0 : Convert.ToInt32(str); 是一种可行的方法,如果您希望 null、空或仅空格的字符串表示为零值。
  • 就我个人而言,我只是检查它是否为空字符串,如果是则返回 0。您也可以使用 TryParse,如果它无法将内容解析为 int,请将其设置为 0,但在这种情况下如果表格最终包含其他意外数据(例如“八”或“约翰”或您可能真正想知道的其他内容),您将掩盖错误。

标签: c# html-agility-pack


【解决方案1】:

您可以使用int.TryParse 代替Convert.ToInt32

int myInt;
if(!int.TryParse(team.SelectSingleNode(".//td[@class='number total won total_won']")?.InnerText.Trim(), out myInt))
{
  myInt = 0;
}

我知道,但是我有 30 多行代码,所以我应该添加很多 if 条件... – Ilnumerouno 刚刚

你可以写一个辅助方法。

public static class Converter{
    public static int ConvertToInt(string stringAsInt){
      int myInt;
      return int.TryParse(stringAsInt, out myInt) ? myInt : 0;
    }
}

调用代码。

var parsedInt = Converter.ConvertToInt(team.SelectSingleNode(".//td[@class='number total won total_won']")?.InnerText.Trim());

【讨论】:

  • 我知道,但是我有30多行代码,所以我应该添加很多if条件......
  • @Ilnumerouno:然后把它放在一个自己的方法中?例如TryGetInt(team, ".//td[@class='number total won total_won']")。坦率地说,如果你有那么多的修剪、解析和内部文本,听起来你应该早点把它提取到一个方法中......
  • @Ilnumerouno 重构你的代码,让它保持干燥(不要重复你自己)
  • @Ilnumerouno 因为这是标准的复制粘贴答案,您可以检查更多的规范重复项之一,例如 stackoverflow.com/questions/9372210/…,它解释了 if 是可选的。
  • 我接受你的回答,但投反对票太可惜了
猜你喜欢
  • 2016-01-26
  • 2014-11-15
  • 1970-01-01
  • 2017-01-19
  • 1970-01-01
  • 2018-02-26
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多