2014-05-22 23 views
-1

我從下面的代碼獲得上述錯誤我得到異常輸入字符串的不正確的格式

System.Collections.Generic.List<int> ListSms = new System.Collections.Generic.List<int>(); 
ListSms.Add(int.Parse(sms.Sms_Nom)); 

問題看起來有些空間,包括我帶來了Sms_Nom所以這是爲什麼呢文本我試圖解析它,但它不工作!

有什麼想法? 感謝名單

+1

「所以這就是我嘗試分析它」 - 是什麼讓你認爲'int.Parse'將接受值與空間?在解析它之前,你需要把它變成正確的格式。 –

+2

解析失敗。包含在'sms.Sms_Nom'中的值不能被分析爲'int'。我們應該怎麼知道爲什麼沒有看到'sms.Sms_Nom'的價值?使用調試器來查找它。 –

+0

使用TryParse ... – Ulaga

回答

1
int value = 0; 
if (int.TryParse(sms.Sms_Nom, out value)) 
{ 
    ListSms.Add(value);    
} 

看一看這個問題約Parse v. TryParse

更新 - 去除beteween

if (int.TryParse(sms.Sms_Nom.ToCharArray() 
      .Where(c => !Char.IsWhiteSpace(c)) 
      .Select(c => c.ToString()) 
      .Aggregate((a, b) => a + b), out value)) 
      { 
       ListSms.Add(value); 
      } 

這將字符串的工作,如空格 「2 2」,這將使之成爲「22」.TryParse()

+0

我猜OP的數字中有空格,例如''12 3「',他想將其解析爲123::_」問題看起來像文本中包含的一些空格「_ –

+0

一個缺點這個解決方案是,如果'Sms_Nom'不是有效的格式,信息將會丟失。也就是說,在列表中,我們只會添加'Sms_Nom',無論如何,它都會被'Parse'方法解析。我們不會添加「Sms_Nom」,例如包含一個空格,但在任何其他方面都是有效的。 – PiotrWolkowski

+0

@TimSchmelter:哦,沒有看到那部分:)現在更新 –

0

使用修剪前int.Parse()。我們建議您使用int.tryParse()而不是int.prase()

+0

修剪不會擺脫文本內的空間。你可能需要使用'String.Replace(「」,「」)'方法。 – PiotrWolkowski

0

問題看起來有些空間,包括我帶來 Sms_Nom文本,所以這是爲什麼我嘗試Parse,但它這麼想的工作!

所以,你有一個sms.Sms_Nom串像"1 2 3"這應該解釋爲123

如果文本中有空格並且想要刪除它們,可以使用此LINQ查詢從所有非空格字符創建一個新字符串。然後使用int.TryParse來檢查它是否是一個int

var noSpaces = sms.Sms_Nom.Where(c => !Char.IsWhiteSpace(c)); 
string smsNom_noSpace = new String(noSpaces.ToArray()); 
int sms_Nom; 
bool isInt = int.TryParse(smsNom_noSpace, out sms_Nom); 
if(isInt) 
    ListSms.Add(sms_Nom);