首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#扩展方法中的类型转换出错

2013-09-26 
C#扩张方法中的类型转换出错以下代码中,第一种转换没问题,第二种用扩展方法转换却不成功,请大牛们不吝赐教

C#扩张方法中的类型转换出错
以下代码中,第一种转换没问题,第二种用扩展方法转换却不成功,请大牛们不吝赐教,谢谢!

C#扩展方法中的类型转换出错

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#扩张方法的类型转换出错 类型转换 扩展方法
[解决办法]

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();
        }
    }
}


[解决办法]
因为你之前强制转换为MMMM,然后隐式转换为int,最后强制转换为double
而如果是object,double的强制转换无法匹配object类型。
[解决办法]
object obj;
(double)obj;//这样不行
Convert.ToDouble(obj);//这样就可以
这就是问题所在
[解决办法]
看见滥用object的,已经感觉“够受的”了。

热点排行