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的输出结果是一样的