2019-10-31-C#-强转空会不会出现异常
| title | author | date | CreateTime | categories |
|---|---|---|---|---|
|
C# 强转空会不会出现异常
|
lindexi
|
2019-10-31 8:53:6 +0800
|
2019-9-10 11:41:7 +0800
|
C#
|
有小伙伴问我强转 null 会不会出现异常,我告诉他,如果是引用类型那么不会,如果是值类型,那么会出现空异常
如果是引用类型,只要是空类型,是支持随意转换,如下面代码,这是可以运行
class Program
{
static void Main(string[] args)
{
Program p = null; object obj = p; Foo foo = (Foo) obj;
}
} class Foo
{ }
如果使用值类型转换,那么将会出现空异常,例如我定义一个枚举
enum NerefiweakawBejairlalhu
{ }
下面代码运行的时候会提示
System.NullReferenceException:“Object reference not set to an instance of an object.”
也就是如果你看到了泛型的转换,请确定泛型不会传入值类型
class Foo<T>
{
public void Cast(object obj)
{
var foo = (T) obj;
}
}
上面代码如果用户传入了值类型,例如 枚举 作为泛型,那么调用 Cast 传入空的值,将会提示对象为空,所以在使用泛型转换的时候,可能强转为空
如果此时将强转换为 as 关键字,将会提示 由于类型参数“T”既没有类类型约束也没有“class”约束,因此不能与“as”运算符一起使用
如果要给泛型约束只能给引用类型用,那么请加上 class 条件
class Foo<T> where T : class
如果需要给值类型用,请使用下面代码
class Foo<T> where T : struct
如果看到了一个 obj 强转一个值类型,那么在 obj 为空的时候出现异常,推荐的方法是通过 is 关键字,在 C# 7.0 的时候可以使用 is 匹配,请看下面代码
class Foo<T> where T : struct
{
public void Cast(object obj)
{
if (obj is T t)
{
var foo = t;
}
}
}
当前,请记得加上 else 提示用户传入的值不能强转传入的类型
2019-10-31-C#-强转空会不会出现异常的更多相关文章
- C# 强转空会不会出现异常
有小伙伴问我强转 null 会不会出现异常,我告诉他,如果是引用类型那么不会,如果是值类型,那么会出现空异常 如果是引用类型,只要是空类型,是支持随意转换,如下面代码,这是可以运行 class Pro ...
- lyc——2019.10.31
10:判决素数个数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入两个整数X和Y,输出两者之间的素数个数(包括X和Y). 输入 两个整数X和Y(1 <= X,Y <= ...
- 牛客CSP-S提高组赛前集训营2 ———— 2019.10.31
比赛链接 期望得分:100+20+20 实际得分:40+20+30 awa cccc T1 :基于贪心的思路,然后开始爆搜(雾 那必然是会死的,好吧他就是死了 #include<iostrea ...
- 【2019.10.17】十天Web前端程序员体验(软件工程实践第五次作业)
结对信息.具体分工 Github地址:https://github.com/MokouTyan/131700101-031702425 学号 昵称 主要负责内容 博客地址 131700101 莫多 代 ...
- 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButton, AppBarButton, AppBarToggleButton
[源码下载] 背水一战 Windows 10 (31) - 控件(按钮类): ButtonBase, Button, HyperlinkButton, RepeatButton, ToggleButt ...
- Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)
题目列表: 2146 Problem A [手速]阔绰的Dim 2147 Problem B [手速]颓废的Dim 2148 Problem C [手速]我的滑板鞋 2149 Problem D [手 ...
- 17.10.31&11.01
10.31模拟考试 Prob.1(AC)裸的矩阵幂 Prob.2(WA)(类似括号匹配求合法方案数) 卡特兰数的一个模型运用.可以推出一个式子(推导方法一个erge讲的,一个骚猪讲的) Prob.3( ...
- 10.31 正睿停课训练 Day13
目录 2018.10.31 正睿停课训练 Day13 A Poker(期望) B Label(高斯消元) C Coin(二分图染色 博弈) 考试代码 A(打表) B 2018.10.31 正睿停课训练 ...
- XSY3244 10.31 D
XSY3244 10.31 D 题意: 数轴上有\(N\)只老鼠\(M\)个洞,每个洞有一个容量,求所有老鼠进洞的最小代价.(\(N,M\leq1000000\),时限\(2s\)) 题解: ...
随机推荐
- C++ base64 opencv Mat 转换
static std::string base64Decode(const char* Data, int DataByte) { //解码表 const char DecodeTable[] = { ...
- HDU 5266 pog loves szh III 线段树,lca
Pog and Szh are playing games. Firstly Pog draw a tree on the paper. Here we define 1 as the root of ...
- Luogu P2051 [AHOI2009]中国象棋(dp)
P2051 [AHOI2009]中国象棋 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个 \(N\) 行 \(M\) 列的棋盘上,让你放若干个炮(可以是 \(0\) 个),使得没有一个炮 ...
- SpringMVC注解开发方式
环境准备 springmvc版本:spring3.2 需要spring3.2所有jar(一定包括spring-webmvc-3.2.0.RELEASE.jar 工程结构 配置前端控制器(web.xml ...
- 从大数据到快数据 数据智创未来——2019 CCF大数据与计算智能大赛正式开赛!
8月17日,以“数据驱动,智创未来”为主题的2019 CCF大数据与计算智能大赛(CCF Computing Intelligence Contest,简称CCF BDCI)全球启动仪式,在北京大学正 ...
- Django项目:CRM(客户关系管理系统)--24--16PerfectCRM实现King_admin日期过滤
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html list_filter = ('date','source','consultant','con ...
- TZ_14_Zuul网关
1.spring-cloud的微服务大致是 2.zuul是 Netflix开源的微服务网关, 它可以和 Eureka. Ribbon. Hystrix等组件配合使用.zul的核心是一系列的过滤器,这些 ...
- angular4 动态创建组件 vs 动态创建模板
实现 模拟场景:页面上"帮助"按钮的点击触发帮助文档的弹出框,且每个页面的帮助文档不一样 因此弹出框里的帮助文档是一个动态模板而不是动态组件 以下comp均代表Type类型的动态 ...
- 沙雕去死吧! 劳资终于弄好了toimcat9 apt和ssl配置
搜一下吧,要不就是不用apr模式,也不用nio模式,直接用bio模式跑的,麻烦问一下,您们都是傻屌吗? APR模式必须要用!!!!! 然后全他妈的用jks证书,然后再提取公钥*.cer,然后再转换为* ...
- 洛谷P2826 [USACO08NOV]光开关Light Switching [2017年6月计划 线段树02]
P2826 [USACO08NOV]光开关Light Switching 题目描述 Farmer John tries to keep the cows sharp by letting them p ...