【发布时间】:2010-12-17 16:09:13
【问题描述】:
我只是好奇是否在 C# 语言或 .NET Framework 中内置了一些东西来测试某个东西是否为整数
if (x is an int)
// Do something
在我看来可能有,但我只是一年级的编程学生,所以我不知道。
【问题讨论】:
-
你的代码中
x的类型是什么? -
感谢 Holterman 的编辑,我应该澄清一下。
我只是好奇是否在 C# 语言或 .NET Framework 中内置了一些东西来测试某个东西是否为整数
if (x is an int)
// Do something
在我看来可能有,但我只是一年级的编程学生,所以我不知道。
【问题讨论】:
x的类型是什么?
使用int.TryParse 方法。
string x = "42";
if(int.TryParse(x, out int value))
// Do something
如果解析成功,则返回true,输出结果为整数。
【讨论】:
TryParse 方法。如果您有一个字符串,使用TryParse 通常是将其转换为这些类型之一的最佳做法。
< 0 检查。
如果你只想检查传递变量的类型,你可能会使用:
var a = 2;
if (a is int)
{
//is integer
}
//or:
if (a.GetType() == typeof(int))
{
//is integer
}
【讨论】:
我想我记得看过 int.TryParse 和 int.Parse Regex 和 char.IsNumber 和 char.IsNumber 之间的性能比较是最快的。无论如何,无论性能如何,这里还有另一种方法。
bool isNumeric = true;
foreach (char c in "12345")
{
if (!Char.IsNumber(c))
{
isNumeric = false;
break;
}
}
【讨论】:
isNumeric = false开头...
我已经编写了大约 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
如果您愿意,也可以在 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);
}
}
如果您不想要循环,只需删除整个循环大括号
【讨论】:
这个函数会告诉你你的字符串是否只包含字符 0123456789。
private bool IsInt(string sVal)
{
foreach (char c in sVal)
{
int iN = (int)c;
if ((iN > 57) || (iN < 48))
return false;
}
return true;
}
这与 int.TryParse() 不同,它会告诉你你的字符串是否可以是一个整数。
例如。 " 123\r\n" 将从 int.TryParse() 返回 TRUE,但从上述函数返回 FALSE。
...仅取决于您需要回答的问题。
【讨论】:
很简单...使用这段代码
bool anyname = your_string_Name.All(char.IsDigit);
如果你的字符串有整数,它会返回真,否则返回假...
【讨论】:
+ 的数字或周围的空格。 (结果变量的命名也令人困惑。)我很想也因为不包括例如0.0 或 1,000(/1.000 如果你在某些语言环境中),但 TryParse 也没有,所以我想它不会更糟。
对于 Wil P 解决方案(见上文),您也可以使用 LINQ。
var x = "12345";
var isNumeric = !string.IsNullOrEmpty(x) && x.All(Char.IsDigit);
【讨论】:
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;
}
}
不久前写的东西。上面有一些很好的例子,但只值我的 2 美分。
【讨论】:
如果您只想检查它是否是字符串,您可以将“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
}
如果你也想获取int值,可以这样写。
方法一
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
}
方法二
string x = "text or int";
int num = Convert.ToInt32(x);
Console.WriteLine(num);
【讨论】:
也许这可以是另一种解决方案
try
{
Console.Write("write your number : ");
Console.WriteLine("Your number is : " + int.Parse(Console.ReadLine()));
}
catch (Exception x)
{
Console.WriteLine(x.Message);
}
Console.ReadLine();
【讨论】:
这个也可以试试:
var ix=Convert.ToInt32(x);
if (x==ix) //if this condition is met, then x is integer
{
//your code here
}
【讨论】: