C#整数或对象对双精度转换错误说明 [英] C# int- or object-to-double casting error explanation

查看:84
本文介绍了C#整数或对象对双精度转换错误说明的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码在最后一次分配时失败:

The below code fails at the last assignment:

static void Main(string[] args)
{
    int a = 5;
    object b = 5;

    System.Diagnostics.Debug.Assert( a is int && b is int );

    double x = (double)a;
    double y = (double)b;
}

如果a和b均为 int ,此错误的原因是什么?

If both a and b are int, what is the cause of this error?

推荐答案

这是一个非常常见的问题。参见 http://blogs.msdn。 com / b / ericlippert / archive / 2009/03/19 / representation-and-identity.aspx 进行解释。

This is an extremely frequently asked question. See http://blogs.msdn.com/b/ericlippert/archive/2009/03/19/representation-and-identity.aspx for an explanation.

代码段:


我对C#强制转换运算符有很多疑问。我最常遇到的问题是:

I get a fair number of questions about the C# cast operator. The most frequent question I get is:

short sss = 123;
object ooo = sss;            // Box the short.
int iii = (int) sss;         // Perfectly legal.
int jjj = (int) (short) ooo; // Perfectly legal
int kkk = (int) ooo;         // Invalid cast exception?! Why?

为什么?因为装箱的 T 只能取消装箱到 T 。 (*)取消装箱后,它只是可以正常转换的值,因此双精度转换就可以正常工作。

Why? Because a boxed T can only be unboxed to T. (*) Once it is unboxed, it’s just a value that can be cast as usual, so the double cast works just fine.

(*)或 Nullable< T>

这篇关于C#整数或对象对双精度转换错误说明的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆