![](/img/trans.png)
[英]Why float is bigger than double after computing same value? Why float can't be implicitly converted to Decimal
[英]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
。 由于intVal
是IConvertible
,你可以使用intVal.ToChar(CultureInfo.InvariantCulture);
如果可以接受的话。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.