的列表中的所有整數:查找給定的字符串值列表中的字符串
"12345"
,"6789a"
,"9876"
,"23467b"
我們如何使用LINQ的聲明在C#中只選擇整數?換句話說,我們只想返回12345
和9876
。
的列表中的所有整數:查找給定的字符串值列表中的字符串
"12345"
,"6789a"
,"9876"
,"23467b"
我們如何使用LINQ的聲明在C#中只選擇整數?換句話說,我們只想返回12345
和9876
。
您可以根據Int32.TryParse
方法的返回值過濾條目:
int temp;
list.Where(x => int.TryParse(x, out temp));
過濾器列表下降到僅這些字符串,其中所有字符是數字:
var filtered = list.Where(s => s.All(char.IsDigit));
替代是使用int.TryParse
作爲過濾函數,它具有許多細微的行爲差異(有效整數的規則允許超過數字,請參閱documentation)。
如果您想要將結果輸入爲整數,請按照.Select(int.Parse)
進行操作。
TryParse
方法int
是最可靠的指標,你有一個合適的數字。
使用方法如下:
int number = 0;
var selected = list.Where(x => int.TryParse(x, out number)).ToList();
方式一:
IEnumerable<int> ints = strings.Where(str => str.All(Char.IsDigit))
.Select(str => int.Parse(str));
此只選擇其中的所有字符是數字字符串。然後解析它們到int
。
一個更好的辦法是使用這個擴展:
public static int? TryGetInt(this string item)
{
int i;
bool success = int.TryParse(item, out i);
return success ? (int?)i : (int?)null;
}
然後你可以使用此查詢:
IEnumerable<int> ints = strings.Select(str => str.TryGetInt())
.Where(nullableInt => nullableInt.HasValue)
.Select(nullableInt => nullableInt.Value);
temp'的'價值的行爲是無證實現細節,可能會改變在未來。我更喜歡[擴展](http://stackoverflow.com/a/19091443/284240)。 –
@TimSchmelter:有效的點。但是,只要後面的代碼沒有使用'temp'的最終值,上面的解決方案就會保持正確。可以將上面的代碼片段放在專用的語句塊中來執行此操作。 – Douglas