2012-02-15 88 views
130
string tags = "9,3,12,43,2" 

List<int> TagIds = tags.Split(','); 

這不工作導致分裂方法返回一個字符串[]我如何轉換逗號分隔字符串轉換成列表<int>

請幫助。

+1

[How to create a list from a comma separated string?](http:// stackoverflow。com/questions/910119/how-to-create-a-listt-from-a-comma-separated-string) – Lijo 2014-07-09 12:09:57

+0

[將逗號分隔的int串轉換爲int數組](https://stackoverflow.com/問題/ 1763613/convert-comma-separated-string-of-ints-to-int-array) – Lijo 2017-05-31 16:29:11

回答

308

這裏是做這件事的一種方法:

List<int> TagIds = tags.Split(',').Select(int.Parse).ToList(); 
+7

這也可能是'List TagIds = new List (tags.Split(',')。Select(int.Parse ));' – phoog 2012-02-15 21:01:15

+2

是否需要'new List <>'? – LiquidPony 2012-02-15 21:03:59

+2

@LiquidPony no;你可以調用'ToList()'來代替;其結果基本相同:'List TagIds = tags.Split(',')。Select(int.Parse).ToList();'你需要做一個或另一個,因爲'在此實現中,Select()是一個IEnumerable <>',但不是'List <>' – phoog 2012-02-15 21:07:19

11

您可以使用LINQ瓦特/ int.Parse()string[]轉換爲IEnumerable<int>,然後將該結果傳遞給List<T>構造:

var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s))); 
2
string tags = "9,3,12,43,2" 

List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList(); 
5

有點LINQ走得很遠:

List<int> TagIds = tags.Split(',') 
     .Select(t => int.Parse(t)) 
     .ToList(); 
1

如果您使用的是C#3.5,你可以使用LINQ來實現這一

string tags = "9,3,12,43,2"; 
List<int> tagIds = tags.Split(',').Select(s=>int.Parse(s)).ToList(); 

或短的一個

string tags = "9,3,12,43,2"; 
List<int> tagIds = tags.Split(',').Select(int.Parse).ToList(); 
3
string tags = "9,3,12,43,2"; 
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList(); 
5

沒有LINQ查詢,可以選擇這種方法,

string tags = "9,3,12,43,2"; 
List<string> numbers = nos.Split(',').ToList<string>(); 

然後你可以將這個List轉換成整數t YPE ...

10

如果你想加入一些簡單的驗證並跳過無效值(而不是拋出一個異常),這裏的東西,它使用的TryParse:

string csv = "1,2,3,4,a,5"; 
int mos = 0; 
var intList = csv.Split(',') 
        .Select(m => { int.TryParse(m, out mos); return mos; }) 
        .Where(m => m != 0) 
        .ToList(); 

//returns a list with integers: 1, 2, 3, 4, 5 

編輯:這裏是一個更新根據Antoine的反饋進行查詢。它首先調用TryParse來過濾掉任何不正確的值,然後解析來執行實際的轉換。

string csv = "1,2,3,4,a,5,0,3,r,5"; 
int mos = 0; 
var intList = csv.Split(',') 
        .Where(m => int.TryParse(m, out mos)) 
        .Select(m => int.Parse(m)) 
        .ToList(); 

//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5 
+0

如果0是一個合法輸入,則失敗! – 2018-01-11 16:58:15

1

我對khalid13的答案做了修改。如果用戶輸入一串「0」,他的回答會從結果列表中刪除。我做了類似的事情,但使用了匿名對象。

var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries) 
      .Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt }) 
      .Where(w => w.didConvert) 
      .Select(s => s.convertedValue) 
      .ToList(); 

TrimNullProtection是一個自定義函數,我用它來保護字符串是否爲空。

上面所做的是去掉任何無法轉換且沒有錯誤的字符串。如果您在轉換出現問題時需要輸入錯誤,那麼接受的答案應該可以解決問題。

1

我偶然發現了這一點,我只是想分享我自己的解決方案沒有LINQ。這是一個原始的方法。非整數值也不會被添加到列表中。

List<int> TagIds = new List<int>(); 
string[] split = tags.Split(','); 
foreach (string item in split) 
{ 
    int val = 0; 
    if (int.TryParse(item, out val) == true) 
    { 
     TagIds.Add(val); 
    } 
} 

希望這會有所幫助。

相關問題