2016-03-06 57 views
1

所以我试图从文本文件读取并将每个字段存储到数组中。但是,当我试图将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; 
     } 
+0

什么错误,什么是'数据[0]'的价值? – Steve

+0

错误显示“输入字符串格式不正确”。 data [0]的值是12345.文本文件的第一行是12345 * Shrek * 1209 * 100,000 * 50,000 –

+0

如果这些值都是数字,那么有没有更多10位数的值? (具体地说,大于'2,147,483,647') –

回答

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

是的,TryParse也是一个安全的选择。 ;)投票 – Ian

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

我怀疑这个空间,但通过控制台应用程序测试显示Convert.ToIn32(..)是足够智能修剪。然而,你是正确的,它不能正确地捕捉到逗号。 –

+1

你可以测试它是很好的。 :)我现在不用我的笔记本电脑。有时候这种看似正确的格式会给我们带来问题。 :) – Ian

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

相关问题