pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

為什么我不應(yīng)該總是在 C# 中使用可空類型

Why shouldn#39;t I always use nullable types in C#(為什么我不應(yīng)該總是在 C# 中使用可空類型)
本文介紹了為什么我不應(yīng)該總是在 C# 中使用可空類型的處理方法,對(duì)大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問題描述

自從 .net 2.0 中引入這個(gè)概念以來(lái),我一直在尋找一些好的指導(dǎo).

I've been searching for some good guidance on this since the concept was introduced in .net 2.0.

為什么我想在 c# 中使用不可為 null 的數(shù)據(jù)類型?(一個(gè)更好的問題是為什么我不默認(rèn)選擇可空類型,而僅在明確有意義的情況下才使用不可空類型.)

Why would I ever want to use non-nullable data types in c#? (A better question is why wouldn't I choose nullable types by default, and only use non-nullable types when that explicitly makes sense.)

選擇可空數(shù)據(jù)類型而不是不可空數(shù)據(jù)類型是否會(huì)對(duì)性能產(chǎn)生重大"影響?

Is there a 'significant' performance hit to choosing a nullable data type over its non-nullable peer?

我更喜歡根據(jù) null 而不是 Guid.empty、string.empty、DateTime.MinValue、<= 0 等檢查我的值,并且通常使用可空類型.我不經(jīng)常選擇可空類型的唯一原因是我后腦勺發(fā)癢的感覺,這讓我覺得不僅僅是向后兼容性迫使額外的?"顯式允許空值的字符.

I much prefer to check my values against null instead of Guid.empty, string.empty, DateTime.MinValue,<= 0, etc, and to work with nullable types in general. And the only reason I don't choose nullable types more often is the itchy feeling in the back of my head that makes me feel like it's more than backwards compatibility that forces that extra '?' character to explicitly allow a null value.

是否有人總是(大多數(shù)情況下)選擇可空類型而不是不可空類型?

Is there anybody out there that always (most always) chooses nullable types rather than non-nullable types?

感謝您的時(shí)間,

推薦答案

你不應(yīng)該總是使用可空類型的原因是有時(shí)你能夠保證一個(gè)值被初始化.并且您應(yīng)該嘗試設(shè)計(jì)您的代碼,以便盡可能經(jīng)常出現(xiàn)這種情況.如果一個(gè)值不可能被未初始化,那么 null 就沒有理由成為它的合法值.作為一個(gè)非常簡(jiǎn)單的例子,考慮一下:

The reason why you shouldn't always use nullable types is that sometimes you're able to guarantee that a value will be initialized. And you should try to design your code so that this is the case as often as possible. If there is no way a value can possibly be uninitialized, then there is no reason why null should be a legal value for it. As a very simple example, consider this:

List<int> list = new List<int>()
int c = list.Count;

始終有效.c 不可能被初始化.如果它變成了一個(gè) int?,你實(shí)際上是在告訴代碼的讀者這個(gè)值可能為空.確保在使用之前檢查它".但是我們知道這永遠(yuǎn)不會(huì)發(fā)生,那么為什么不在代碼中公開這個(gè)保證呢?

This is always valid. There is no possible way in which c could be uninitialized. If it was turned into an int?, you would effectively be telling readers of the code "this value might be null. Make sure to check before you use it". But we know that this can never happen, so why not expose this guarantee in the code?

在值是可選的情況下,您是絕對(duì)正確的.如果我們有一個(gè)可能返回也可能不返回字符串的函數(shù),則返回 null.不要返回 string.Empty().不要返回魔法值".

You are absolutely right in cases where a value is optional. If we have a function that may or may not return a string, then return null. Don't return string.Empty(). Don't return "magic values".

但并非所有值都是可選的.將所有內(nèi)容都設(shè)為可選會(huì)使您的其余代碼變得更加復(fù)雜(它添加了另一個(gè)必須處理的代碼路徑).

But not all values are optional. And making everything optional makes the rest of your code far more complicated (it adds another code path that has to be handled).

如果你能特別保證這個(gè)值永遠(yuǎn)有效,那為什么要扔掉這些信息呢?這就是您通過(guò)使其成為可空類型來(lái)做的事情.現(xiàn)在該值可能存在也可能不存在,任何使用該值的人都必須處理這兩種情況.但是您知道,首先這些情況中只有一種是可能的.所以請(qǐng)幫助您的代碼的用戶,并在您的代碼中反映這一事實(shí).然后,您的代碼的任何用戶都可以依賴該值是否有效,而且他們只需處理一種情況而不是兩種情況.

If you can specifically guarantee that this value will always be valid, then why throw away this information? That's what you do by making it a nullable type. Now the value may or may not exist, and anyone using the value will have to handle both cases. But you know that only one of these cases is possible in the first place. So do users of your code a favor, and reflect this fact in your code. Any users of your code can then rely on the value being valid, and they only have to handle a single case rather than two.

這篇關(guān)于為什么我不應(yīng)該總是在 C# 中使用可空類型的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

C# HasValue vs !=null(C# HasValue vs !=null)
C# ADO.NET: nulls and DbNull -- is there more efficient syntax?(C# ADO.NET:空值和 DbNull —— 有沒有更高效的語(yǔ)法?)
How to set null value to int in c#?(如何在c#中將空值設(shè)置為int?)
How to handle nulls in LINQ when using Min or Max?(使用 Min 或 Max 時(shí)如何處理 LINQ 中的空值?)
Method call if not null in C#(在 C# 中如果不為 null 的方法調(diào)用)
GetType on Nullable Boolean(可空布爾值上的 GetType)
主站蜘蛛池模板: 上海新光明泵业制造有限公司-电动隔膜泵,气动隔膜泵,卧式|立式离心泵厂家 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 间甲酚,间甲酚厂家-山东祥东新材料 | 考勤系统_人事考勤管理系统_本地部署BS考勤系统_考勤软件_天时考勤管理专家 | 珠宝展柜-玻璃精品展柜-首饰珠宝展示柜定制-鸿钛展柜厂家 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 天津拓展_天津团建_天津趣味运动会_天津活动策划公司-天津华天拓展培训中心 | 东莞爱加真空科技有限公司-进口真空镀膜机|真空镀膜设备|Polycold维修厂家 | 淬火设备-钎焊机-熔炼炉-中频炉-锻造炉-感应加热电源-退火机-热处理设备-优造节能 | 防堵吹扫装置-防堵风压测量装置-电动操作显示器-兴洲仪器 | 耐酸碱泵-自吸耐酸碱泵型号「品牌厂家」立式耐酸碱泵价格-昆山国宝过滤机有限公司首页 | 千斤顶,液压千斤顶-力良企业,专业的液压千斤顶制造商,shliliang.com | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 希望影视-高清影视vip热播电影电视剧免费在线抢先看 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 气动|电动调节阀|球阀|蝶阀-自力式调节阀-上海渠工阀门管道工程有限公司 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 防火板_饰面耐火板价格、厂家_品牌认准格林雅 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 葡萄酒灌装机-食用油灌装机-液体肥灌装设备厂家_青州惠联灌装机械 | 丁基胶边来料加工,医用活塞边角料加工,异戊二烯橡胶边来料加工-河北盛唐橡胶制品有限公司 | 隔爆型防爆端子分线箱_防爆空气开关箱|依客思 | 无锡网站建设-做网站-建网站-网页设计制作-阿凡达建站公司 | 派克防爆伺服电机品牌|国产防爆伺服电机|高低温伺服电机|杭州摩森机电科技有限公司 | 自动记录数据电子台秤,记忆储存重量电子桌称,设定时间记录电子秤-昆山巨天 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 水质监测站_水质在线分析仪_水质自动监测系统_多参数水质在线监测仪_水质传感器-山东万象环境科技有限公司 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 河南砖机首页-全自动液压免烧砖机,小型砌块水泥砖机厂家[十年老厂] | 自动气象站_农业气象站_超声波气象站_防爆气象站-山东万象环境科技有限公司 | 隧道烘箱_隧道烘箱生产厂家-上海冠顶专业生产烘道设备 | 大立教育官网-一级建造师培训-二级建造师培训-造价工程师-安全工程师-监理工程师考试培训 | 工控机-图像采集卡-PoE网卡-人工智能-工业主板-深圳朗锐智科 | 耐磨陶瓷,耐磨陶瓷管道_厂家-淄博拓创陶瓷科技 | 深圳希玛林顺潮眼科医院(官网)│深圳眼科医院│医保定点│香港希玛林顺潮眼科中心连锁品牌 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 烟台金蝶财务软件,烟台网站建设,烟台网络推广 | 小港信息港-鹤壁信息港 鹤壁老百姓便民生活信息网站 |