2012-04-21 35 views
6

列出的int我有這樣一段代碼:字符串整型成與一個的TryParse

TheString = "443,432,546,4547,4445,2,132"; //actually, about 1000 entries  
List<int> TheListOfIDs = new List<int>(); 
TheListOfLeadIDs = from string s in TheString.Split(',') 
        select Convert.ToInt32(s)).ToList<int>(); 

我知道我可以使用try catch來確保轉換不會引發錯誤,但我想知道我可以如何使用linq語句中的TryParse進行操作。

謝謝。

+2

你有什麼期望時,發現非int值的情況發生,用0替換它,忽略它,拋出一個錯誤? – ilivewithian 2012-04-21 12:27:32

回答

7
TheListOfLeadIDs = (from string s in TheString.Split(',') 
        let value = 0 
        where int.TryParse(s, out value) 
        select value).ToList<int>(); 
+0

我收到錯誤:'只讀範圍變量不能用作賦值目標' – Myster 2012-06-20 04:48:43

+0

這不起作用。 '無法通過範圍變量作爲一個輸出或參數' – Phil 2016-10-21 14:04:56

+0

我不會downvote,因爲我可能會失去一些東西。但是:這是行不通的。 – 2016-12-20 09:49:26

6
TheListOfIDs = TheString.Split(',') 
         .Select(s => 
         { 
          int i; 
          return Int32.TryParse(s, out i) ? i : -1; 
         }).ToList(); 

這將返回任何-1失敗的轉換。

0

警告:未嘗試過。

string[] myString = TheString.Split(','); 

int leadId; 
var theListOfLeadIds = (from myString in myString where int.TryParse(myString, out leadId) select int.Parse(myString)).ToList<int>(); 

這意味着你將只能得到價值成功解析...

2

你可以做這樣的:

string TheString = "443,432,546,4547,4445,2,132"; //actually, about 1000 entries 
int temp=0; 
var TheListOfIDs= TheString 
        .Split(',') 
        .Where (ts =>int.TryParse(ts,out temp)) 
        .Select (ts =>temp) 
        .ToList(); 
相關問題