强制类型转换和as运算符的区别

如题所述

问题从写代码时遇到的一个报错开始,我没有注意到同事写的是一个结构体,转换类型时直接用了 as
于是有这样一个报错:
The `as' operator cannot be used with a non-nullable value type `XXXXData'

意思就是 as 运算符不能用于 非空值类型
同事更新了svn看到了报错,于是把我代码中的“data["VVV"]“ as XXXXData” 改为了“( XXXXData)data["VVV"]“”
报错解除了。
我当时还迷迷糊糊的,直到他告诉我他写的是一个结构体不是一个类。
我对这方面的理解还不是过分透彻,于是花时间找了一些相关的知识,汇总如下:

强制类型转换:转换不成功会抛出异常,对引用类型和值类型都适用。
as运算符:转换不成功得到一个null值,不会抛出异常;仅适用于引用类型,不能用于值类型。仅适用于引用类型,不能用于值类型。仅适用于引用类型,不能用于值类型。

其他关于类型转换的深入研究见其他博文

结构体是值类型
结构可以声明构造函数,但他们必须带参数...
结构不能声明默认构造函数——没有参数的构造函数,或析构函数。
ps:与类的区别
结构是值类型,堆栈分配
类是引用类型,托管堆分配
当你写一个结构的时候,写着写着,哎呀,结构的字节数已经大于
温馨提示:答案为网友推荐,仅供参考
相似回答