繁体   English   中英

为什么从int,double,float和decimal转换为char起作用,但是当那些相同的变量预先转换为IConvertible时,不是吗?

[英]Why casting from int, double, float and decimal to char works, but when those same variables are beforehand casted to IConvertible, doesn't?

考虑以下代码:

class Program
{
    static void Main(string[] args)
    {
        int intVal = 1;
        double doubleVal = 1;
        float floatVal = 1;
        decimal decimalVal = 1;

        Console.WriteLine((char)intVal);
        Console.WriteLine((char)doubleVal);
        Console.WriteLine((char)floatVal);
        Console.WriteLine((char)decimalVal);
    }
}

该代码有效。 无效的代码:

class Program
{
    static void Main(string[] args)
    {
        IConvertible intVal = 1;
        IConvertible doubleVal = 1d;
        IConvertible floatVal = 1f;
        IConvertible decimalVal = 1m;

        // System.InvalidCastException: 'Unable to cast object of type 'System.Int32' to type 'System.Char'.'
        Console.WriteLine((char)intVal); 
        Console.WriteLine((char)doubleVal);
        Console.WriteLine((char)floatVal);
        Console.WriteLine((char)decimalVal);
    }
}

为什么?

装箱的值类型只能取消装箱到其类型。 无效的相同原因:

object o = 1;
var d = (double)o;

IConvertible intVal = 1; 将值装箱到对象。 您正在执行的操作与此类似:

object intVal  = 1;
Console.WriteLine((char)intVal );

您不能将object (在这种情况下为Int32类型)直接转换为char 由于intValIConvertible ,你可以使用intVal.ToChar(CultureInfo.InvariantCulture); 如果可以接受的话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM