IF和?:表达式有什么区别?
原来总觉得IF和那个?:表达式是一样的,可是前两天编程序的时候吃了这个错。
using System;
class Test
{
public static void Main(string[] args)
{
int a = 1;
Random r = new Random();
object v = a==1 ? r.NextDouble() :
r.Next();
Console.WriteLine("value type = {0}", v.GetType());
if (a==1) v = r.Next();
else v = r.NextDouble();
Console.WriteLine("value type = {0}", v.GetType());
Console.ReadLine();
}
}
你觉得上面红色的那一句和蓝色的那一句一样吗?我原来以为是一样的,可是当你看到结果你就知道这两句是不一样的:
value type = System.Double
//红色那句的结果
value type = System.Int32
//蓝色那句的结果
前一个是表达式,也就是说,编译器将它做为一个1+2+3来处理,而后一句可是不同的语句。在前一句中编译器进行了隐式的类型转换,这就是两个不一样的原因。
注意:如果你用Console.WriteLine输出结果的时候,你会发现Double
123.0和int 123的输出结果是一样的 |