布加迪娱乐城


布加迪娱乐城春天的时候,我看见漫天的柳絮,拍下我和风的合影。我跟着蝴蝶,去寻花;跟着鸟儿,去寻窝;跟着小溪,去寻山谷。偶尔,当我孤寂的时候,我才想起还未走远的冬和一路的泥泞,寒冷在此刻实在不值得一提。
布加迪娱乐城我拿酒告诉你的
布加迪娱乐城他洗牌,反复地洗牌,一双手在微微颤抖。布加迪娱乐城学校规定老师上课不许接电话。  一天,我们上物理课,老师电话响了。老师纠结地看了半天,问我们:“领导电话,接不?”我们回答:“必须接!”  然后老师出去大喊一句:“老婆干啥啊?我上课呢!”布加迪娱乐城脸也不洗,胡子也不刮
布加迪娱乐城要求咱们立即停止施工。布加迪娱乐城不仅是他,连巴瑞也想起来了,方才易飞遮掩动作时所造就的那团影子,根本就是大梵影,虽略有不同,但绝对是相同的手法。布加迪娱乐城我说。布加迪娱乐城女生对男生说:“我有个问题一直想问你。”  男生高傲的说:“问吧,不耻下问是个好现象!”  女生说:“上次别人让你还钱,你说没钱,这次别人来,你为什么又说没钱?!”  男生叹了口气,说:“哎呀,我要守信用嘛”布加迪娱乐城(未完待续)

皇冠足球比分

大发论坛时时彩平台尊龙娱乐是黑网吗海天国际娱乐城注册送钱凯发娱乐乐宝娱乐城真人赌钱亚美国际娱乐城 金龙国际 www.am8.com 亚洲城娱乐 老k国际娱乐城 666k8.com 金威国际娱乐城 名人国际娱乐城 ag娱乐平台 V博娱乐城 澳门总统娱乐场网站地图赌博工具大全网站地图大发888最佳状态网站地图setoutouzy.com网站地图皇冠管理官网网站地图888真人彩民网站地图银河娱乐网站地图大发888中期网站地图白宫娱乐下载网站地图博天环境网站地图波音平台不能用ie网站地图波音平台一般什么时候维护网站地图迈巴赫线上娱乐城网站地图信德赌场网站地图澳门黄金城222网站地图百家乐打法网站地图

你写的return null正确吗?

上次一篇“你写的try…catch真的有必要吗”引起了很多朋友的讨论。本次我在code review又发现了一个问题,那就是有人有意无意的写出了return null这样的代码,例如:

       public User GetUser(Guid userId)
        {
            if ( /*for some reason*/)
                return null;
            
            return DB.GetByUserId(userId);
        } 

这样的写法有木有问题?

在我看来没有充分的理由不应该返回null,因为方法的使用者并不知道在何种条件下会得到null,从而导致臭名昭著的NullReferenceException异常。

如果由于其他原因导致无法得到一个User,我们应该抛出一个明确的异常供上层服务决定如何处理:

       public User GetUser(string userName, string password)
        {
            if ( /*for some reason*/)
               return new SpecificException("can't get this user because ....");
            
            return DB.GetByUserId(userId);
        } 

在我读过的开源项目中我几乎没有见到过return null的写法。能让我一时想到的两个linq方法FirstOrDefault()和LastOrDefault(),这两个方法通过命名的方式提醒使用者该方法会返回null。

说到FirstOrDefault()方法让我想起了很多人容易犯的另一个错误:

       public User GetUserById(Guid userId)
        {
            return list.FirstOrDefault(x=>x.UserId==userId);
        }

在确认数据库中该userId必须对应一个User的情况下使用FirstOrDefault()方法,此种场景我会建议你果断使用Single()方法。因为此时使用FirstOrDefault()会隐藏bug。你期望该userId必须得到一个User,如果Single()方法抛出异常则说明有bug出现,并且让你在第一时间发现该bug。

F#为了减少null类型的使用引入了option类型,在将option用作函数的返回类型时,如果没有对未定义的类型做处理,编译器会报错。

let invalidInt = None

match invalidInt with 
| Some x -> printfn "the valid value is A" x
| None -> printfn "the value is None" 

如果此处的模式匹配忘记编写None->分支,编译器将会报错,从而提醒你必须处理invalidInt值为None时的逻辑。但是在C#中使用null类型,编译器给予不了我们帮助,所以我们应该避免return null这样的代码,你觉得呢?

刚才搜了一下stackoverflow,发现一篇很有意思的讨论 Should a retrieval method return 'null' or throw an exception when it can't produce the return value? 我觉得里面的回答比较准确。

posted @ 2015-11-27 23:57 richiezhang 阅读(...) 评论(...) 编辑 收藏