当前位置: 首页 > news >正文

十大高端网站设计苏州建设网站公司

十大高端网站设计,苏州建设网站公司,古楼角网站建设,网站设计开发文档模板为你的项目启用可空引用类型IntroC# 从 8.0 开始引入了可空引用类型#xff0c;我们可以为项目启用可空引用类型来借助编译器来帮助我们更好的处理代码中的空引用的处理#xff0c;可以避免我们写很多不必要 null 检查#xff0c;提高我们的效率Why为什么我们要启用可空引用… 为你的项目启用可空引用类型IntroC# 从 8.0 开始引入了可空引用类型我们可以为项目启用可空引用类型来借助编译器来帮助我们更好的处理代码中的空引用的处理可以避免我们写很多不必要 null 检查提高我们的效率Why为什么我们要启用可空引用类型呢首先我们可以看一下 asp.net core 项目asp.net core 的项目正在大量的使用可空引用类型详情可以参考https://github.com/dotnet/aspnetcore/issues/5680Updating ASP.NET Core to use C# 8s nullable reference types would:Help ASP.NET Core libraries avoid null reference exceptions internally. It will help us find and prevent our bugs and increase our developer productivityProvide guidance to developers who are using ASP.NET Core about which APIs can accept and return a null reference and which APIs cant. This would improve the developer experience of using ASP.NET Core主要分为两方面一方面是内部的代码对于内部代码而言使用可空引用类型我们可以借助编译器清晰地了解一个变量是否会为 null 不会为 null 的变量就不再需要进行空检查了另一方面是对于使用的代码对于使用启用空引用类型的类库编译器可以提供更好的空检查支持开发者可以清晰地了解哪些 API 是允许为 null哪些 API 是不允许为 null 的对开发者更为友好How接着我们就来看一看如何为我们的项目启用可空引用类型吧微软的文档上提供了比较详细的说明详细可以参考文末的引用链接启用可空引用类型只需要在项目文件中添加 Nullableenable/Nullable 即可LangVersion 需要设置为 8 及以上。Nullable 上下文包含了两个上下文一个是 Nullable annotation context(支持 ? 表示可为空的引用类型)一个是 Nullable warning context(支持编译器针对可空引用类型的警告)Nullable 上下文有 4 种配置配置如下enablewarningsannotationsdisableSettingWarning Context StatusAnnotation Context Statusenableenabledenabledwarningenableddisabledannotationsdisabledenableddisabledisableddisabled推荐直接使用 enable 启用可空引用类型只启用 annotation 上下文编译器不会针对可空引用类型的检查做出警告意义就不太大了只启用 warning 上下文可以使用在不想在自己应用中启用可空引用类型可以尝试这个配置不配置 nullable 或者配置 disable 则可以完全禁用可空引用类型除了针对  project 的 global 的配置之外我们还可以在项目源代码里通过 #nullable 来改变局部的可空上下文配置通过 #nullable restore 恢复默认的可空引用上下文配置#nullable enable: 设置 nullable annotation context 和 nullable warning context 为 enabled.#nullable disable: 设置 nullable annotation context 和 nullable warning context 为 disabled.#nullable restore: 恢复 nullable annotation context 和 nullable warning context 为项目默认的配置.#nullable disable warnings: 设置 nullable warning context 为 disabled.#nullable enable warnings: 设置 nullable warning context 为 enabled.#nullable restore warnings: 恢复 nullable warning context 为项目配置#nullable disable annotations: 设置 nullable annotation context 为 disabled.#nullable enable annotations: 设置 nullable annotation context 为 enabled.#nullable restore annotations: 恢复 annotation warning context 为项目配置启用可空引用类型之后引用类型就不允许被设置为 null如果要设置为 null可以在类型后加一个 ? 设置为可空的引用类型如 string? 或者使用 ! 让编译器允许赋值如string a null!;这也是我们需要注意的一个地方可空引用类型只是编译器的检查并不能够严格的保证不会被赋值为 null对于类库项目如果public 的 API 期望的参数是不可空的引用类型除了使用不可空引用类型外还是需要保留 null 检查Sample首先可以看一个接口public interface IPropertyConfigurationout TEntity, TProperty {IPropertyConfigurationTEntity, TProperty HasColumnTitle(string title);IPropertyConfigurationTEntity, TProperty HasColumnFormatter(string? formatter);IPropertyConfigurationTEntity, TProperty HasColumnInputFormatter(Funcstring?, TProperty?? formatterFunc); } 来看实现internal sealed class PropertyConfigurationTEntity, TProperty : PropertyConfiguration, IPropertyConfigurationTEntity, TProperty {private readonly PropertyInfo _propertyInfo;public PropertyConfiguration(PropertyInfo propertyInfo){_propertyInfo  propertyInfo;PropertyName  propertyInfo.Name;ColumnTitle  propertyInfo.Name;}public IPropertyConfigurationTEntity, TProperty HasColumnTitle(string title){ColumnTitle  title ?? throw new ArgumentNullException(nameof(title));return this;}public IPropertyConfigurationTEntity, TProperty HasColumnFormatter(string? formatter){ColumnFormatter  formatter;return this;}public IPropertyConfigurationTEntity, TProperty HasInputFormatter(FuncTEntity?, TProperty?, TProperty?? formatterFunc){InternalCache.InputFormatterFuncCache.AddOrUpdate(_propertyInfo, formatterFunc);return this;} } 可以看到 HasColumnTitle  的参数中的 title 是不可空的引用类型即使如此实现代码里还是做了 null 检查而且可空引用类型在 throw new ArgumentNullException() 的时候也不会引发警告警告示例如果赋值 null 给一个不可为空的引用类型时编译器就会给出一个警告示例如下在往一个不可空引用类型列表里中添加 null 时编译器也会给出一个警告如果一个可空的的引用类型变量没有检查 null 的时候也会有警告从上图中可以看出使用 var 声明变量的时候会是一个可空的引用类型More使用可空引用类型可以一定程度上帮助我们减少不必要的 null 检查但是对于类库项目来说该有的 null 检查还是要有的对于应用来说借助可空引用类型也可以比较清晰地了解哪些地方需要检查 null哪些地方不需要可以提升代码质量对于 null 包容运算符 ! 可以将一个可能 null 的对象赋值给不可空的引用类型变量尽量不用使用用了这个就是自己在代码里埋雷本来不会为 null 的变量、属性也会出现 null 的情况如果还没有必要的 null 检查完全是自己给自己挖坑。但是在使用过程中感觉有些情况下还是不够智能在测试项目中 Assert 的时候就不能很好的工作来看一个示例从上面的示例来看在使用 importedList[i].Id/Title 之前已经使用了 Assert.NotNull(importedList[i])理论上来说 importedList[i] 是不会为 null 的但是编译器现在还没这么智能还需要进一步的优化Resharper 是可以检测出来的对于测试项目你如果遇到这种情况可以禁用可空引用类型或者使用 annotations 配置或者可以声明一个不可空的引用类型变量最近改了两个项目开始使用了可空引用类型有需要可以参考一下一个是类库项目把原来使用 Jetbrains.Annotations 替换成了可空引用类型可以参考https://github.com/WeihanLi/WeihanLi.Npoi 另一个是一个应用项目可以参考https://github.com/WeihanLi/DbTool/最后想说鉴于目前 asp.net core 正在大力采用可空引用类型大家还是可以了解一下的Referencehttps://docs.microsoft.com/en-us/dotnet/csharp/nullable-referenceshttps://docs.microsoft.com/en-us/dotnet/csharp/tutorials/upgrade-to-nullable-referenceshttps://docs.microsoft.com/en-us/dotnet/csharp/nullable-migration-strategieshttps://github.com/dotnet/aspnetcore/issues/5680https://github.com/WeihanLi/WeihanLi.Npoi/pull/98https://github.com/WeihanLi/DbToolhttps://github.com/dotnet/samples/tree/master/csharp/NullableIntroduction/NullableIntroductionhttps://stackoverflow.com/questions/54526652/when-to-null-check-arguments-with-nullable-reference-types-enabledhttps://headspring.com/2020/06/02/applying-nullable-reference-types-in-fixie/
http://www.yutouwan.com/news/476148/

相关文章:

  • 网站针对爬虫爬取做的优化上海做网站报价
  • 友链网站用wordpress修改网站
  • 网站域名做入什么科目建筑公司网站建设方案
  • 上海网站制作案例石家庄楼盘最新消息
  • 走出趣网站怎么做网站怎么做百度关键字搜索
  • 网站建设初期 该如何推广高端品牌冰箱
  • 建手机号码的网站建筑公司注册
  • 怎样注册自己网站佛山做外贸网站推广
  • 深圳网站设计公司排名热血传奇网页游戏
  • 网站开发 公司 深圳东莞最新消息今天
  • 做网站费用上海WordPress文章首页缩进
  • 买了个网站源码后要怎么用wdcp自动备份wordpress
  • 有没有便宜的网站制作上海监理建设协会网站
  • 零六年自助建设网站郑州妇科医院排行榜前十名
  • 网站做照片企业网站建设目标
  • 免费做章子的网站wordpress4.9.4 模版修改
  • 手机网站空间申请西安网页设计多少钱
  • 洛阳网站开发培训宝安建网站多少钱
  • 河北搭建营销型网站百度四川建设厅网站
  • 做全屏式网站尺寸是多大网站流量 收益
  • 贵阳建站哪个网站可以免费建站啊免费建网站
  • 企业网站虚拟空间未来最紧缺的十大专业
  • 怎么黑入网站装修房子什么风格最耐看
  • 笨笨网站建设专家网站源码后台
  • 企业网站优化报告山东省城乡建设部网站首页
  • 眼镜商城网站建设方案天元建设集团有限公司承兑
  • 兴仁县城乡建设局网站广东东莞是几线城市
  • 专业做网站建设公司appache wordpress
  • 合肥市建设厅网站网站建设用宝塔
  • 区块链网站建设哪里网站建设好