我有一个字符串,我希望它只是数字。我尝试使用LINQ
:
string[] values = { "123", "a123" };
bool allStringsContaintsOnlyDigits = true;
foreach(string value in values)
{
if(!value.All(char.IsDigit))
{
allStringsContaintsOnlyDigits = false;
break;
}
}
if(allStringsContaintsOnlyDigits) { /* Do Stuff */ }
但只有两个字符串的循环(并保证我有两个字符串)有点单调乏味......
所以我想也许这样做:
if(values[0].All(char.isDigit) && values[1].All(char.isDigit)) { /* Do Stuff */ }
但是有更优雅的方式吗?类似的东西:
values.All(char.IsDigit) // for all strings
感谢。
注意:负数需要被拒绝。含义:-125
应返回false
。
答案 0 :(得分:13)
怎么样
values.All(s => s.All(Char.IsDigit));
检查序列所有字符中的所有字符串是否为数字。
答案 1 :(得分:4)
values.SelectMany(s => s).All(char.IsDigit);
答案 2 :(得分:2)
你可以这样做。
使用正则表达式。
bool allints = values.All(x=> Regex.IsMatch(x, @"^[0-9]*$"));
使用int.Parse
的另一种方法,但请注意允许的max(int)值为2147483647。
int value;
bool allints = values.All(x=>x[0] != '-' && int.TryParse(x.Trim(), out vlaue));
答案 3 :(得分:2)
检查 string 是否全部为数字:
String value = ...
boolean allDigits = value.All(c => c >= '0' && c <= '9');
要检查IEnumerable<string>
(包括string[]
)是否全部为数字:
String[] source = ...
boolean allDigits = source
.All(value => value
.All(c => c >= '0' && c <= '9'));
请注意,由于Char.IsDigit(c)
返回 true 问题中的初始c >= '0' && c <= '9')
更改为Char.IsDigit
>不仅在0..9
上,而且在许多其他角色上,例如波斯数字:۰ ۱ ۲ ۳ ۴ ۵ ۶ ۷
...
答案 4 :(得分:2)
(values[0] + values[1]).All(char.IsDigit);
因为它们都只是字符串,所以将它们连接起来然后在每个字符上使用LINQ。