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

liumeibiao 2013-09-22 07:43:09
以下代码中,第一种转换没问题,第二种用扩展方法转换却不成功,请大牛们不吝赐教,谢谢!



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();
}
}
...全文
126 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liumeibiao 2013-09-22
  • 打赏
  • 举报
回复
4、5、6楼说得有理,谢谢回答!
  • 打赏
  • 举报
回复
看见滥用object的,已经感觉“够受的”了。
全栈极简 2013-09-22
  • 打赏
  • 举报
回复
object obj; (double)obj;//这样不行 Convert.ToDouble(obj);//这样就可以 这就是问题所在
threenewbee 2013-09-22
  • 打赏
  • 举报
回复
因为你之前强制转换为MMMM,然后隐式转换为int,最后强制转换为double 而如果是object,double的强制转换无法匹配object类型。
liumeibiao 2013-09-22
  • 打赏
  • 举报
回复
引用 1 楼 guwei4037 的回复:
public static double ToDouble(this object v) { return Convert.ToDouble(v);//这样就可以 }
Convert.ToDouble()是可以的,我想知道为什么用扩展方法抽出来之后,转换就不成功了,谢谢!
threenewbee 2013-09-22
  • 打赏
  • 举报
回复
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();
        }
    }
}
全栈极简 2013-09-22
  • 打赏
  • 举报
回复
public static double ToDouble(this object v) { return Convert.ToDouble(v);//这样就可以 }

111,092

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧