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 提示用户传入的值不能强转传入的类型

最新文章

  1. 学习SQLAlchemy Core
  2. CopyOnWriteArrayList
  3. delphi XML 原来可以玩接口
  4. rr
  5. Servlet使用简介
  6. Python元祖
  7. Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin【Finchley 版】
  8. Centos 7 搭建 你懂的
  9. VUE2 项目 引入 leaflet.draw全过程
  10. Win10系统总是提示&quot;在商店中查找应用&quot;的关闭方法
  11. webdriver设置浏览器全屏及设置浏览器窗口为特定大小的方法
  12. 目标检测(二)SSPnet--Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognotion
  13. 学习windows编程 day3 之窗口绘画一:点线绘制
  14. android应用私有存储文件的写入与读取-openFileInput 和 openFileOutput
  15. centos 配置subversion svn
  16. Linux多线程--使用信号量同步线程【转】
  17. python爬虫的教程
  18. Docker使用Dockerfile创建支持ssh服务自启动的容器镜像
  19. Tomcat Server
  20. TFS自定义开发中的反射应用

热门文章

  1. 深入浅出 Java Concurrency (22): 并发容器 part 7 可阻塞的BlockingQueue (2)[转]
  2. docker和宿主机之间复制文件
  3. 一次.NET项目反编译的实战经验(WinForm)
  4. iview 小问题笔记
  5. 抓取B站小视频
  6. 在多版本python的pip的安装与对应包的安装
  7. ubuntu 下安装 YouCompleteMe
  8. idea中使用本地jar包
  9. JAVA邀请码生成器
  10. 洛谷P2982 [USACO10FEB]慢下来Slowing down [2017年四月计划 树状数组01]