判斷對象是否爲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);