C# 有没有办法轻松检查int?

C# 有没有办法轻松检查int?,c#,C#,是否有一个简单的表达式可以放在if语句中检查值是否为int? 类似这样,要检查x是否为int: x = 1 if (Diceroll() = 1) { x = x * 0.75 } if (Diceroll() = 2) { x = x * 1.25 } if (Diceroll() = 3) { x = x * 1 } if (x != int) { consol.writeline("X is not an int") } if (x = int) {

是否有一个简单的表达式可以放在if语句中检查值是否为int? 类似这样,要检查
x
是否为int:

x = 1

if (Diceroll() = 1)
{
    x = x * 0.75
}
if (Diceroll() = 2)
{
    x = x * 1.25
}
if (Diceroll() = 3)
{
    x = x * 1
}


if (x != int)
{
    consol.writeline("X is not an int")
}
if (x = int)
{
    consol.writeline("X is an int")
}

您可能需要详细说明您的问题。首先,x对象的类型是什么

其次,是否要严格测试其数据类型是否为int? 这很容易:

 object p = ....;
 bool is_int = p is int;
或者你想检查其他东西?例如

  • 。。。如果p是Int64或Uint32等,上述操作将失败;或者 基本上是任何其他不严格为int(Int32)的整数类型
  • 如果双p=1,上述操作也会失败
  • 。。。而且它也会 字符串p=“1”失败

这些是你可能会考虑还是不想考虑的案例?如果是这样,他们需要额外的工作。

对你的问题有两种不同的解释,如果你问“x”的值是否可以是整数,你可以使用

int temp = 0;
string x = "numberofsomesort";
if (!int.TryParse(x,out temp))
{
    Console.Writeline("X is not an int");
}
object x;

if (!(x is int))
{
    Console.Writeline("X is not an int");
}
或者,如果您有一个对象,并且希望检查其类型,则可以使用

int temp = 0;
string x = "numberofsomesort";
if (!int.TryParse(x,out temp))
{
    Console.Writeline("X is not an int");
}
object x;

if (!(x is int))
{
    Console.Writeline("X is not an int");
}

编辑:查看您的新代码,第一个建议是正确的,因为您正在检查“x”的值是否可以转换为整数。

您可以通过两种方式执行此操作:

int aIntValue;
if(int.TryParse(x, out aIntValue))
如果int.TryParse返回true,它将值“x”转换为变量“aIntValue”。如果返回false,“x”不是数字

或者您可以这样做:

if(!(x is int))

你可以这样写:

double x;

// your code here

if (x != Math.Floor(x))
   Console.WriteLine("X is not an int")
else
   Console.WriteLine("X is an int")

另请参见此答案:关于比较浮点值(根据CodeCaster的评论).

那么,首先是什么类型的
x
?请给出一个……我们无法真正说出您目前想要实现的目标。您的代码不会按原样编译。@ja72我认为您不需要编译此代码来查看它应该做什么。我指的是
consol
writeline
,它们在语法上不一致是的,但这对OP有什么帮助呢?如果他们的标题与他们要求的内容更接近,那会更有帮助。
is
仅适用于引用类型。嗯,你不这么认为吗?bool is_int1=((int)1)is int;bool is_int2=((double)2)is int;编译良好并按预期工作我一直使用
is
as
,这肯定只适用于ref类型。是的,“as”只适用于ref类型。其他一切都没有多大意义;例如int number=somevariable as int;如果somevariable不是int,该返回什么?默认值(int),那么0?这与int-somevariable=0的情况是无法区分的。无论如何,这不是“is”的问题“关键字tho,因为它不会与这种问题斗争。与我的回答相同抱歉,你在我之前发布了几条消息,我没有看到。你不必为此否定我。从我们掌握的一点信息来看,这可能是OP真正想要的。只需注意舍入误差。在模糊比较中使用一点epsilon值可能就足够了,但就我个人而言,如果可能的话,我会避免使用浮点。或者,如果double是他的用例,则简单地使用x%1==0