2017-10-13 68 views
-2

我正在开发从html表中获取数据的软件。所以这条线:如何转换int32中的空字符串?

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()); 

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

任何想法来解决这个问题?

+0

如果它是一个n空字符串,你想要的值是什么?事实上,一个空字符串不是有效的int –

+0

@GiladGreen,如果没有值,值应该为0 – Ilnumerouno

+3

好像你可以用直接的“if”语句来解决这个问题...... – sous2817

回答

3

您可以使用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行的代码,所以我要补充,如果条件...的很多 - 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()); 
+0

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

+3

@Ilnumerouno:然后把它放在它自己的方法?例如'TryGetInt(team,“.//td[@class='number total won total_won']”)'。坦率地说,如果你有很多修剪,解析和内部文本,你应该已经提前解压缩了这个方法... – Chris

+0

@Ilnumerouno重构你的代码,保持干燥(不要重复自己) – maccettura

相关问题