在C#中,如何检查字符串是否包含整数?

我只想知道,String变量是否包含可解析的正整数值。 我现在不想解析这个值。

目前我在做:

int parsedId; if ( (String.IsNullOrEmpty(myStringVariable) || (!uint.TryParse(myStringVariable, out parsedId)) ) {//..show error message} 

这很难看 – 如何更简洁?

注意:我知道扩展方法,但我想知道是否有内置的东西。

假设您要检查字符串中的所有字符是否为数字,您可以使用Enumerable.All扩展方法和Char.IsDigit方法 ,如下所示:

 bool allCharactersInStringAreDigits = myStringVariable.All(char.IsDigit); 

你可以使用char.IsDigit :

  bool isIntString = "your string".All(char.IsDigit) 

如果字符串是数字,则返回true

  bool containsInt = "your string".Any(char.IsDigit) 

如果字符串包含数字,则返回true

您可以检查字符串是否仅包含数字:

 Regex.IsMatch(myStringVariable, @"^-?\d+$") 

但是数字可以大于Int32.MaxValue或小于Int32.MinValue – 你应该记住这一点。

另一种选择 – 创建扩展方法并在那里移动丑陋的代码:

 public static bool IsInteger(this string s) { if (String.IsNullOrEmpty(s)) return false; int i; return Int32.TryParse(s, out i); } 

这将使您的代码更干净:

 if (myStringVariable.IsInteger()) // ... 

也许这可以帮助

 string input = "hello123world"; bool isDigitPresent = input.Any(c => char.IsDigit(c)); 

从msdn回答。

答案似乎是没有。

虽然有很多其他好的答案,但它们要么隐藏丑陋(我没有要求),要么引入新问题(边缘案例)。

对不起,没有得到你的问题。 这样的事情呢?

 str.ToCharArray().Any(char.IsDigit); 

或者值是否必须完全是整数,没有任何额外的字符串?

 if(str.ToCharArray().All(char.IsDigit(c));