IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> C# 项目的 nullable 检查 -> 正文阅读

[移动开发]C# 项目的 nullable 检查

.Net6 生成的项目, 默认会启用 nullable 检查, 这样会大大避免 NullReferenceException?异常, 

csproj 文件设置,
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

Nullable 的取值有 enable/disable/warnings/annotations 4种, 4种类型涉及两个维度, 警告上下文和注解上下文的开启,?

enable: 意义很明确, 启用最严格的方式, .net 6 默认方式.? 即编译器对表达式推断和声明不符合, 将会报编译错误.?

disable: 老项目默认方式, 即编译器不对nullable做任何推断, 也不会有任何警告.?

warnings: 即关闭注解上下文, 仅仅开启警告上下文, 简单理解: 编译器不对引用类型变量做推断,? 仅对值类型做简单推断, 违反nullable规则, 仅仅报 warning.?

annotations:?编译器对引用类型变量自行推断, 但不做警告.?

实际项目的问题:

问题1: 我们能确定赋值不会为null, 但编译器推断为空, 怎么调教编译器呢?

方案: 在代码中加上下面的方法即可.?

ArgumentNullException.ThrowIfNull(keyValuePairs);

问题2:? [DisallowNull] 注解和 T 的区别, [AllowNull] 和? T? 和Nullable<T> 的区别:??

[DisallowNull] string a1="a" ;? ?string a2="a";?

上面代码在C#8是没有区别的,??[DisallowNull] 常用于泛型类定义.

[AllowNull] string a1="a" ;? ?string? a2="a";? Nullable<string> a3="a";

上面代码在C#8是没有区别的,? [AllowNull]?常用于泛型类定义.

问题3: 强制干预编译器赋null值?

string a = null;     // warning
string b = null!;    // ok
string c = default!; // ok

问题4: 如何为老项目启用nullable检查

csproj文件中, 启用nullable检查,?

然后先为每个cs文件加上下面的指令

#nullable disable

然后一个一个文件开启, 并修正代码.?

=================================

参考

=================================

C# 8: Nullable Reference Types - Meziantou's blog

C# 8.0 如何在项目中开启可空引用类型的支持 - walterlv?

可为空引用类型 | Microsoft Docs

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:17:50  更:2021-11-18 11:18:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:01:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码