一位面试官向我提出这个问题,当我正在检查它是如何工作时如何检查字符的类型和双倍? 请任何人解释一下。
class Program
{
static void Main(string[] args)
{
double d=0;
if((double)d == 'c')
{
Console.WriteLine("working");
}
else
{
Console.WriteLine("not");
}
Console.ReadLine();
}
}
答案 0 :(得分:8)
Char
类型实际上是 16位整数,因此您可以根据需要进行比较:
Double left = 'B'; // <- 66.0
Char right = 'A'; // <- it's 16-bit int == 65 in fact
if (left > right) {...}
但是有一个问题:由于==
以及其他!=或Double
而没有宽容 >浮点类型有舍入错误,所以
Double left = 66;
实际上可能是66.000000000002
或65.9999999999998
。这样的事情:
Double left = 'B'; // <- 66.0
Char right = 'A'; // <- it's 16-bit int == 65 in fact
// (left == right) comparison with tolerance
// Since right is integer in fact, 0.1 tolerance is OK
if (Math.Abs(left - right) < 0.1) {...}
答案 1 :(得分:2)
您可以使用普通GetType()
和typeof()
来检查任何对象的类型。像这样
class Program
{
static void Main(string[] args)
{
double d=0;
if(d.GetType() == typeof(Char))
{
Console.WriteLine("working");
}
else
{
Console.WriteLine("not");
}
Console.ReadLine();
}
}
答案 2 :(得分:0)
实际上当你试图将任何数值与char值进行比较时,它没有给你任何编译时或运行时错误,因为char实际上代表int16或16位整数值,所以当你尝试比较double时,对于整数或长整数,它将简单地比较该字符的ASCII值。这是一些例子......
double d = 65;
if (d == 'A')
{
Console.WriteLine("working");
}
else { Console.WriteLine("not"); }
上面的代码输出是“工作”,因为char“A”ASCII值是65,你将它与65进行比较,所以if条件是真的。