尝试转换时格式异常

时间:2016-03-06 03:13:09

标签: c# visual-studio-2012

所以我试图从文本文件中读取并将每个字段存储到一个数组中。但是当我尝试将accountNumber转换为Int时,我收到错误。

     public bool matchCustomer(int accountID){
        string[] data = null;
        string line = Global.currentFile.reader.ReadLine();
        while (line != null)
        {
            data = line.Split('*');
            this.accountNumber = Convert.ToInt32(data[0]);
            line = Global.currentFile.reader.ReadLine();
            if (accountID == this.accountNumber)
            {
                return true;
            }

          }

        return false;
       }

3 个答案:

答案 0 :(得分:1)

那是因为data [0]不能转换为int。什么是运行时的数据[0]?

您可以使用:

int value;
if(Int32.TryParse(data[0], out value))
{
  accountNumber = value;
}
else
{
  //Something when data[0] can't be turned into an int.
  //You'll have to decide this logic.
}

答案 1 :(得分:1)

可能,因为你在字符串中用分隔符*分割:

12345 * Shrek * 1209 * 100,000 * 50,000

你留下了一个间隔号码" 12345"而不是所有数字" 12345"。这导致它不可转换。尝试应用修剪:

 this.accountNumber = Convert.ToInt32(data[0].Trim());

另外,请注意带有千位分隔符逗号(50,000和100,000)的字符串。如果它是不可转换的,您可能需要用空字符串替换它:

data[4].Replace(",","").Trim();

答案 2 :(得分:0)

其他两个答案解决了这个问题并修复了,我想提供另一个使用Linq的替代方案。

您可以使用此替换完整的while阻止内容。

return line.Split('*').Select(s=> s.Trim().Replace(",", ""))
            .Where(c=> Regex.IsMatch(c.Trim(), @"\d+"))
            .Select(s=>int.Parse(s.Trim()))            
            .Any(e=>e == accountId);

工作Demo