日期:2014-05-18  浏览次数:20601 次

泛型转换的问题,求解释
static void convert<T>(ref T t1) where T : struct 
  {
  if (t1 is Enum)
  {
  T t2 = (T)Enum.Parse(typeof(T), "1");
  T t3 = (T)Convert.ChangeType(1,Enum.GetUnderlyingType(typeof(T)));
  T t4 = (T)(object)1;
  }
   
  }

  在泛型示例中,这三句转换代码结果是一致的.
  我得出的结论是:
  这三句代码都是拆箱的过程(将 int 类型转换 object 然后转目标类型) 

  本人非常不理解 t2,t3 的转换方式.有点多此一举. 求解释.

------解决方案--------------------
另外只有t4存在装箱拆箱的过程,另外2个则没有明显的动作(即使偷偷做了也看不出)。
t4是先将整数1装箱到O类型,然后按照T类型拆箱到值类型。
enum是值类型的,所有值类型都是可以这样拆箱的,因此对于任何的struct,这样写都成立,其效率也最高。