返回null还是抛出Exception

嘎子 C#, 未分类 2016-03-22 1,618 次浏览 2条评论

我自己在写代码的时候也经常会写return null,但仔细想想这真的好吗?

这样写有什么问题呢?如果方法的使用者并不知道(或者对null的情况没有进行处理)在何种条件下会得到null,从而导致臭名昭著的NullReferenceException异常。而且这个Exception在调试过程中还是不可见的(因为只有当你得到null时这个Exception才会出现)。

如果你直接抛出异常,那么结果基本是一致的。

那什么情况下返回null,什么情况抛出异常呢?在StackOverflow上有一个讨论:Should a retrieval method return 'null' or throw an exception when it can't produce the return value?觉得这里的结论还是比较一致的:如果返回null是一个正常行为,则返回null,如果是一个错误,则抛出Exception。

还有一种更好的实践,在linq中有两个方法FirstOrDefault()和LastOrDefault(),会给人一种暗示,那就是Default是什么东东,空的?还是null。

所以如果非要返回null,上面的函数可以重命名为GetUserOrNull(string userName, string password)。

最后总结一下:

1、如果返回null是一个正常行为,则返回null。但在命名时最好给用户以提示,例如GetUserOrNull(string userName, string password)这样的函数名。

2、如果是错误,则抛出Exception。

原创文章,文章首发于:Riley Ge (@rileyge) — Steemit

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: 返回null还是抛出Exception

相关主题

  • C#重载操作符==和!=时注意问题2016-03-12 C#重载操作符==和!=时注意问题 (0)
    1、大家一定要明确一点就是如果两个类在没有重载==和!=时用这两个运算符进行比较,那么只有引用相同的地方的时候才返回true,否则(不管里面的内容是否相等)返 […]
  • C#中的具名参数、可选参数及注意问题2016-03-21 C#中的具名参数、可选参数及注意问题 (0)
    具名参数 和 可选参数 是 C# framework 4.0 出来的新特性。 一. 常规方法定义及调用 public void […]
  • Kotlin中如何实现类似Java或C#中的静态方法2017-05-28 Kotlin中如何实现类似Java或C#中的静态方法 (0)
    大家可以在网络上搜到不少这样的文章,官方推荐是包级函数,也有人说用伴生对象(companion […]
  • 用.NET执行AutoCAD自带命令2016-02-20 用.NET执行AutoCAD自带命令 (2)
    看到网上很多文章说什么以前用其他语言时执行AutoCAD中自带的命令非常方便,而.Net使用时非常不方便。这样说也不算错,因为在AutoCAD […]
  • 用C#删除程序占用文件2016-01-29 用C#删除程序占用文件 (4)
    在写卸载程序时经常会遇到要删除文件自身的问题,此时文件被占用,使用常规方法并不容易删除。 删除文件方法如下: 文件 […]
  • C#中几种比较是否相等的方法(Equals,ReferenceEquals,==)2016-12-04 C#中几种比较是否相等的方法(Equals,ReferenceEquals,==) (0)
    这个文章是之前遇到的一个问题,自己就记录在案了,现在分享出来给大家,当然这里面的内容在很多地方也能找到,并非常所有的东西都是原创,但我会尽量的把问题说的非常明 […]

说点什么

2 评论 在 "返回null还是抛出Exception"

提醒
avatar
排序:   最新 | 最旧 | 得票最多
奇虎分享网
游客

不错学习了,谢谢分享!

中土生活红宝书
游客

刚才仔细看了一下StackOverflow上的讨论,很多讨论非常有意义,例如:
1、无论你用哪种方法,在文档中都要写的非常清楚,这个非常重要。
2、可以增加参数,让用户来决定是抛出异常还是返回null

回顶部