首页 > 编程语言 >C# Nullable

C# Nullable

时间:2023-03-20 17:13:59浏览次数:31  
标签:Console string Nullable C# Value WriteLine null public

判断对象是否为null否则报错

string? a = string.Empty;
if (a is null)
if (ReferenceEquals(a, null))
if (a == null)


public void GetUser(string name) => ArgumentNullException.ThrowIfNull(nameof(name));

var a= b??throw new ArgumentNullException("Name must not be null")

//语法糖(目前没有上线)
public void GetUser(string name!!) => Console.WriteLine(DBNull.Value);

DBNull

一般用于判断DB和DataTable的值是否为null

Console.WriteLine(DBNull.Value);
Console.WriteLine(null != DBNull.Value);

public void A (object? a)
{
    Console.WriteLine(a!=null);
    Console.WriteLine(a!=DBNull.Value);
}

检查元素是否可为空的反射API

提供来自反射成员的可空性信息和上下文:

  • ParameterInfo 参数
  • FieldInfo 字段
  • PropertyInfo 属性
  • EventInfo 事件
var example = new Example();
var nullabilityInfoContext = new NullabilityInfoContext();
foreach (var propertyInfo in example.GetType().GetProperties())
{
    var nullabilityInfo = nullabilityInfoContext.Create(propertyInfo);
    Console.WriteLine($"{propertyInfo.Name} property is {nullabilityInfo.WriteState}");
}

// Output:
// Name property is Nullable
// Value property is NotNull

class Example
{
    public string? Name { get; set; }
    public string Value { get; set; }
}

检查嵌套元素是否可为空的反射API

允许您获取嵌套元素的可为空的信息, 您可以指定数组属性必须为非空,但元素可以为空,反之亦然。

Type exampleType = typeof(Example);
PropertyInfo notNullableArrayPI = exampleType.GetProperty(nameof(Example.NotNullableArray));
PropertyInfo nullableArrayPI = exampleType.GetProperty(nameof(Example.NullableArray));

NullabilityInfoContext nullabilityInfoContext = new();

NullabilityInfo notNullableArrayNI = nullabilityInfoContext.Create(notNullableArrayPI);
Console.WriteLine(notNullableArrayNI.ReadState);              // NotNull
Console.WriteLine(notNullableArrayNI.ElementType.ReadState);  // Nullable

NullabilityInfo nullableArrayNI = nullabilityInfoContext.Create(nullableArrayPI);
Console.WriteLine(nullableArrayNI.ReadState);                // Nullable
Console.WriteLine(nullableArrayNI.ElementType.ReadState);    // Nullable

class Example
{
    public string?[] NotNullableArray { get; set; }
    public string?[]? NullableArray { get; set; }
}

API接口报错案例

项目中使用了<Nullable>enable</Nullable>
Api报错,但是字段没有标识[Required]

{
    "type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "00-8d8245e63ed44d0e0a45bd96350980ee-9f6a21dba718ebd8-00",
    "errors": {
        "Name": [
            "The Name field is required."
        ]
    }
}

需要全局添加以下配置

services.AddControllers(options => options.SuppressImplicitRequiredAttributeForNonNullableReferenceTypes = true);

标签:Console,string,Nullable,C#,Value,WriteLine,null,public
From: https://www.cnblogs.com/RainFate/p/17236969.html

相关文章

  • java常用的工具类之Collectors.toMap
    java.util.stream.Collectors一.Collectors.toMap1.构造ListList<Student>list=newArrayList<>();for(inti=1;i<4;i++){list.add(newStudent(i+"","......
  • Source Generator-扩充原有代码
    我们经常会遇到,原有代码中新增方法,扩展我们自己写的代码。这个使用SourceGenerator也可以实现在上一章的接触上新增类库(AugmentingGeneratorMethod)添加Microsoft.Co......
  • 爬虫:bs4介绍,遍历文档树、bs4搜索文档树、css选择器、selenium基本使用、无界面浏览器
    目录一、bs4介绍,遍历文档树1.1bs4模块介绍1.2bs4的遍历文档树二、bs4搜索文档树1.2find_all(name,attrs,recursive,text,**kwargs)2.2find(name,attrs,r......
  • Docker:docker基本概念
    前言docker必须安装在linux操作系统docker基本概念镜像(image)镜像是一整套【应用+环境】的集合。可以类比为Java的类容器(container)容器是镜像的实例。可以类比为Java......
  • [ABC294Ex] K-Coloring
    考虑dfs后搞出dfs树,考虑若干返祖边有限制,那么,我们一个朴素的想法是枚举这些有被返祖边搞到的点的颜色,但这样最坏是\(O(K^n)\)的。但显然一条返祖边在钦定完一个端点......
  • canvas 中使用跨域的图片
    一张跨域的图片直接在canvas中使用控制台是会给出警告的:Error:SecurityError:Failedtoexecute'toDataURL'on'HTMLCanvasElement':Taintedcanvasesmaynotbeex......
  • css实现文本水平&垂直对齐的三种方式
    第一种:使用padding和text-align:center例如:.center{padding:100px0;border:1pxsolidgreen;text-align:center;} 第二种:使用line-heig......
  • Microsoft Project教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介IT宝库MS项目入门教程-从基本概念开始,简单易学地学习MS项目,包括设置,简介,入门,创建新计划,设置资源,为任务分配资源,计划持续时间成本和时间,跟踪进度,高级计划,项目状......
  • 【题解】CF1034E
    题目描述给定\(n\)和长度为\(2^n\)的数列\(a_{0},a_{1}...a_{2^n-1}\)和\(b_{0},b_1...b_{2^n-1}\),保证每个元素的值属于\([0,3]\)生成序列\(c\),对于\(......
  • package.json 文档
    Description这份文档是您所需要了解的关于软件包中所需要的内容的全部内容。它必须是JSON,而不仅仅是JavaScript字面量。本文档中描述的许多行为都受到config中描述的配置......