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的,已经感觉“够受的”了。