C# 测试以查看字符串是否为整数?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1752499/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
C# testing to see if a string is an integer?
提问by Alex
I'm just curious as to whether there is something built into either the C# language or the .NET Framework that tests to see if something is an integer
我只是好奇 C# 语言或 .NET Framework 中是否内置了一些东西来测试某些东西是否是整数
if (x is an int)
// Do something
It seems to me that there might be, but I am only a first-year programming student, so I don't know.
在我看来可能有,但我只是一个一年级的编程学生,所以我不知道。
采纳答案by Brandon
Use the int.TryParsemethod.
使用int.TryParse方法。
string x = "42";
int value;
if(int.TryParse(x, out value))
// Do something
If it successfully parses it will return true, and the out result will have its value as an integer.
如果它成功解析,它将返回 true,并且输出结果的值将是一个整数。
回答by rochal
If you just want to check type of passed variable, you could probably use:
如果您只想检查传递变量的类型,您可以使用:
var a = 2;
if (a is int)
{
//is integer
}
//or:
if (a.GetType() == typeof(int))
{
//is integer
}
回答by Wil P
I think that I remember looking at a performance comparison between int.TryParse and int.Parse Regex and char.IsNumber and char.IsNumber was fastest. At any rate, whatever the performance, here's one more way to do it.
我想我记得看过 int.TryParse 和 int.Parse Regex 和 char.IsNumber 和 char.IsNumber 之间的性能比较是最快的。无论如何,无论性能如何,这里还有一种方法可以做到。
bool isNumeric = true;
foreach (char c in "12345")
{
if (!Char.IsNumber(c))
{
isNumeric = false;
break;
}
}
回答by Shujin
I've been coding for about 2 weeks and created a simple logic to validate an integer has been accepted.
我已经编码了大约 2 周,并创建了一个简单的逻辑来验证一个整数是否已被接受。
Console.WriteLine("How many numbers do you want to enter?"); // request a number
string input = Console.ReadLine(); // set the input as a string variable
int numberTotal; // declare an int variable
if (!int.TryParse(input, out numberTotal)) // process if input was an invalid number
{
while (numberTotal < 1) // numberTotal is set to 0 by default if no number is entered
{
Console.WriteLine(input + " is an invalid number."); // error message
int.TryParse(Console.ReadLine(), out numberTotal); // allows the user to input another value
}
} // this loop will repeat until numberTotal has an int set to 1 or above
you could also use the above in a FOR loop if you prefer by not declaring an action as the third parameter of the loop, such as
如果您愿意不将操作声明为循环的第三个参数,您也可以在 FOR 循环中使用上述内容,例如
Console.WriteLine("How many numbers do you want to enter?");
string input2 = Console.ReadLine();
if (!int.TryParse(input2, out numberTotal2))
{
for (int numberTotal2 = 0; numberTotal2 < 1;)
{
Console.WriteLine(input2 + " is an invalid number.");
int.TryParse(Console.ReadLine(), out numberTotal2);
}
}
if you don't want a loop, simply remove the entire loop brace
如果您不想要循环,只需删除整个循环大括号
回答by mike
This function will tell you if your string contains ONLY the characters 0123456789.
这个函数会告诉你你的字符串是否只包含字符 0123456789。
private bool IsInt(string sVal)
{
foreach (char c in sVal)
{
int iN = (int)c;
if ((iN > 57) || (iN < 48))
return false;
}
return true;
}
This is different from int.TryParse() which will tell you if your string COULD BE an integer.
eg. " 123\r\n" will return TRUE from int.TryParse() but FALSE from the above function.
这与 int.TryParse() 不同,它会告诉你你的字符串是否可以是一个整数。
例如。" 123\r\n" 将从 int.TryParse() 返回 TRUE,但从上述函数返回 FALSE。
...Just depends on the question you need to answer.
...只取决于您需要回答的问题。
回答by Sibghat
its simple... use this piece of code
它很简单......使用这段代码
bool anyname = your_string_Name.All(char.IsDigit);
it will return true if your string have integer other wise false...
如果您的字符串具有整数,则它将返回 true 否则为 false ...
回答by Georg
For Wil P solution (see above) you can also use LINQ.
对于 Wil P 解决方案(见上文),您还可以使用 LINQ。
var x = "12345";
var isNumeric = !string.IsNullOrEmpty(x) && x.All(Char.IsDigit);
回答by Kwekuq
private bool isNumber(object p_Value)
{
try
{
if (int.Parse(p_Value.ToString()).GetType().Equals(typeof(int)))
return true;
else
return false;
}
catch (Exception ex)
{
return false;
}
}
Something I wrote a while back. Some good examples above but just my 2 cents worth.
前段时间写的东西。上面有一些很好的例子,但只有我的 2 美分。
回答by DxTx
If you only want to check whether it's a string or not, you can place the "out int" keywords directly inside a method call. According to dotnetperls.com website, older versions of C# do not allow this syntax. By doing this, you can reduce the line count of the program.
如果你只想检查它是否是一个字符串,你可以将“out int”关键字直接放在方法调用中。根据 dotnetperls.com 网站,旧版本的 C# 不允许这种语法。通过这样做,您可以减少程序的行数。
string x = "text or int";
if (int.TryParse(x, out int output))
{
// Console.WriteLine(x);
// x is an int
// Do something
}
else
{
// x is not an int
}
If you also want to get the int values, you can write like this.
如果你也想得到 int 值,你可以这样写。
Method 1
方法一
string x = "text or int";
int value = 0;
if(int.TryParse(x, out value))
{
// x is an int
// Do something
}
else
{
// x is not an int
}
Method 2
方法二
string x = "text or int";
int num = Convert.ToInt32(x);
Console.WriteLine(num);
Referece: https://www.dotnetperls.com/parse
参考:https://www.dotnetperls.com/parse
回答by Hari Purnomo
Maybe this can be another solution
也许这可以是另一种解决方案
try
{
Console.Write("write your number : ");
Console.WriteLine("Your number is : " + int.Parse(Console.ReadLine()));
}
catch (Exception x)
{
Console.WriteLine(x.Message);
}
Console.ReadLine();