CLR中的范型为什么不支持很多操作符?

昨天看了一篇文章,关于.NET范型的
终于明白了为什么以下代码不能编译:

T  Max<T>( T a, T b )
{
          if( a<b )
                  return b;
          else
                  return a;
}

void main()
{
           int m = Max<int>( 3, 5 );
}

范型的实例化居然是在运行时JIT编译的时候,
而不是编译器编译的时候,但是编译是会进行类型安全检查
范型函数中Object中的ToString, GetHashCode等方法是可以调用的,例如上述中你可以调用a.ToString()没问题
说白了:除非你对类似于a这种参数调用的方法是所有.NET类型都支持的,否则无法通过编译,所以Object中的方法可以调用
但是可以可以添加约束来搞定需要调用什么方法的问题
T  Max<T>  where T: IComparable ( T a, T b )
{
          if( a.CompareTo(b) < 0 )
                  return b;
          else
                  return a;
}

看了文章相信你会明白怎么回事
http://msdn.microsoft.com/en-us/magazine/cc163683.aspx

对 .NET感兴趣的同学,可以好好看看

原文地址:https://www.cnblogs.com/caoshenghe/p/1574036.html