C#/.NET:为什么我无法将此十进制数转换为整数?

3

可能是重复问题:
为什么我不能将int拆箱为decimal?

好的,C#/.NET专家们,能否有人告诉我为什么这个强制转换起作用:

static void Main(string[] args)
{
    int _int = 0;
    decimal _decimal = 1;

    _int = (int)_decimal;

    Console.ReadLine();
}

...但是这两个都不行?

static void Main(string[] args)
{
    int _int = 0;
    decimal d = 1;
    object _decimal = d;

    _int = (int)_decimal;

    Console.ReadLine();
}

static void Main(string[] args)
{
    int _int = 0;
    object _decimal = 1M;

    _int = (int)_decimal;

    Console.ReadLine();
}

只要我从明确声明的十进制类型转换,我就可以将十进制转换为整数,但当十进制存储在对象类型中时,我无法将其转换为整数?这是怎么回事?

注意:我知道我可能可以使用Convert.ToInt32(),但我正在努力弄清楚为什么这里不起作用。


1
你也可以分两步完成:"_int = (int) (decimal) _decimal"。 - Joe
答案似乎在相关链接之一下面:为什么我不能将int解包为decimal? - RickL
1个回答

1

因为在框架中定义了从十进制到整数的显式转换。阅读MSDN文档


这个答案是完全错误的。明确的转换存在并不以任何方式解释为什么在_unboxing_值时不允许转换。另一方面,这个问题的副本有一个被接受的答案,可以准确地解释问题所在。 - Peter Duniho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接