首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#通过对象解除装箱

c#通过对象解除装箱
EN

Stack Overflow用户
提问于 2018-10-01 11:06:48
回答 2查看 710关注 0票数 3

我可以在没有任何问题的情况下将byte转换为int

代码语言:javascript
复制
byte a = 2;
int b = a;      // => unboxing, boxing or conversion?

当我先把byte投给object,然后再投给int时,我得到了一个InvalidCastException

代码语言:javascript
复制
byte a = 2;
object b = a;    // => boxing?
int c = (int) b; // => unboxing fails?

但是我可以通过使用Convert.ToInt32来解决这个问题。

代码语言:javascript
复制
byte a = 2;
object b = a;                // => boxing?
int c = Convert.ToInt32(b);  // => what happens here?
  • 为什么我在第二个例子中得到一个InvalidCastException
  • 背景中的Convert.ToInt32是什么?
  • 我给boxingunboxingconversion贴上了正确的标签吗?/在我不确定的例子中,正确的术语是什么?
  • 转换操作符在这里吗?是否概述了基本类型的基本转换操作符?

请不要暗示我可能犯了错或错过了其他事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-01 11:12:12

为什么我在第二个例子中得到一个InvalidCastException

因为您指定了要将(同时开箱)变量的类型转换为其他类型。并且没有定义内建、隐式或显式转换运算符,所以它失败了。

背景中的Convert.ToInt32是什么?

这。 --它使用IConvertible接口进行转换。

我是否正确地标注了装箱、反装箱和转换?/在我不确定的示例中,正确的术语是什么?

代码语言:javascript
复制
int b = a;      // => conversion
object b = a;    // => boxing
int c = (int) b; // => casting fails
int c = Convert.ToInt32(b);  // => what happens here: a method call that happens to do a conversion

转换操作符在这里吗?是否概述了基本类型的基本转换操作符?

是的,虽然是在CLR中定义的。

票数 6
EN

Stack Overflow用户

发布于 2018-10-01 11:13:47

为什么我在第二个例子中得到一个InvalidCastException?

您只能打开原始类型的框。

背景中的Convert.ToInt32是什么?

它包含一个转换。

我是否正确地标注了装箱、反装箱和转换?/在我不确定的示例中,正确的术语是什么?

代码语言:javascript
复制
byte a = 2;
int b = a;      // convertation (byte to int)

object b = a;    // boxing
int c = (int) b; //unboxing

object b = a;                // boxing
int c = Convert.ToInt32(b);  // convertation (object to int)

转换操作符在这里吗?是否概述了基本类型的基本转换操作符?

您可以反映框架代码,以了解它如何更深入地工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52589790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档