以下代码中,第一种转换没问题,第二种用扩展方法转换却不成功,请大牛们不吝赐教,谢谢!public static class AAAA
{
    public static double ToDouble(this object v)
    {
        return (double)v;
    }
}public enum MMMM
{
    M1 = 1,
    M2 = 2
}class Program
{
    static void Main(string[] args)
    {
        MMMM aaa = MMMM.M1;
        object bbb = aaa;        Console.WriteLine((double)(MMMM)bbb);        Console.WriteLine(((MMMM)bbb).ToDouble());        Console.Read();
    }
} C# 扩张方法 类型转换 C#扩张方法的类型转换出错类型转换扩展方法

解决方案 »

  1.   

     public static double ToDouble(this object v)
            {
                return Convert.ToDouble(v);//这样就可以
            }
      

  2.   

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;namespace ConsoleApplication1
    {
        public static class AAAA
        {
            public static double ToDouble(this object v)
            {
                if (v is Enum)
                    return (double)(int)v;
                return (double)v;
            }
        }    public enum MMMM
        {
            M1 = 1,
            M2 = 2
        }    class Program
        {
            static void Main(string[] args)
            {
                MMMM aaa = MMMM.M1;
                object bbb = aaa;            Console.WriteLine((double)(MMMM)bbb);            Console.WriteLine(((MMMM)bbb).ToDouble());            Console.Read();
            }
        }
    }
      

  3.   

    Convert.ToDouble()是可以的,我想知道为什么用扩展方法抽出来之后,转换就不成功了,谢谢!
      

  4.   

    因为你之前强制转换为MMMM,然后隐式转换为int,最后强制转换为double
    而如果是object,double的强制转换无法匹配object类型。
      

  5.   

    object obj;
    (double)obj;//这样不行
    Convert.ToDouble(obj);//这样就可以
    这就是问题所在
      

  6.   

    看见滥用object的,已经感觉“够受的”了。