C# C将没有值的子字符串转换为0

C# C将没有值的子字符串转换为0,c#,C#,使用C,我需要将子字符串转换为int,即使子字符串的值为null 我的代码读取文本文件的行,然后将文本的某些部分指定给字符串 int _CUSTBAL = Convert.ToInt32(line.Substring(5, 2)); 示例文本: 1234510等 1234620等 12347等 我遇到的问题是,如果行包含空格,它会抛出异常。如果子字符串包含空白,我需要它返回零。例如如果文本格式为空白9,那么我需要返回09。我尝试过使用可为null的类型,但这并没有奏效。谢谢这个怎么样: str

使用C,我需要将子字符串转换为int,即使子字符串的值为null

我的代码读取文本文件的行,然后将文本的某些部分指定给字符串

int _CUSTBAL = Convert.ToInt32(line.Substring(5, 2));
示例文本:

1234510等 1234620等 12347等

我遇到的问题是,如果行包含空格,它会抛出异常。如果子字符串包含空白,我需要它返回零。例如如果文本格式为空白9,那么我需要返回09。我尝试过使用可为null的类型,但这并没有奏效。谢谢

这个怎么样:

string sub = line.Substring(5, 2).Trim();
int _CUSTBAL = sub != string.Empty ? Convert.ToInt32(sub) : 0;
它删除所有空白,并为空字符串返回0

否则:

string sub = line.Substring(5, 2);
int _CUSTBAL = !string.IsNullOrWhiteSpace(sub) ? Convert.ToInt32(sub) : 0;

你需要自己去做

string toConvert;

if(string.IsNullOrWhiteSpace(line))
    toConvert = "0";
else
    toConvert = line;

Convert.ToInt32(toConvert);
如果TryParse失败,_CUSTBAL将为0

int _CUSTBAL;
int.TryParse(line.Substring(5, 2), out _CUSTBAL);
是演示您的测试用例的小提琴


如果确实需要前导零,_CUSTBAL.ToString000将变为2到002,20到020。

为什么不检查空白值

var value = line.Substring(5, 2);
var _CUSTBAL = String.IsNullOrEmpty(value)? 0 : Convert.ToInt32(value);

String.Replace,0应该用来删除空格并在那里放置一个零。返回09是什么意思?Convert.ToInt32返回int。您的意思是需要字符串表示吗?不是int?不清楚090是什么意思,没有这样的数字。整数中不能有前导零。未知数太多了。在你的一个例子中,你想要3个数字,这与问题的其余部分相矛盾。在int类型中不能有前导零。找出你想要的。Bobby在询问之前搜索,这样你就不会得到反对票,相信我,我认为你需要的是空或空白。你的第二个选择是完美的。Thanks@BobbyTurkalino,关于ToInt32 vs TryParse,我要指出的一件事是,如果sub最终不是空引用或数字,例如'e'或其他,你会得到一个FormatException-TryParse会给你一个0来表示任何不是数字的东西,无论它是空引用、字母等等。参见post