Null-Forgiving 运算符仍然显示警告
Null-Forgiving operator still showing warning
我有以下方法来覆盖 ToString()
public override string ToString()
{
if (HasNoValue)
return "No value";
return Value!.ToString();
}
如果 HasNoValue returns 为真,则值 属性 包含空值,因此返回“无值”。
HasNoValue 属性(和 HasValue)如下所示:
public bool HasValue => value != null;
public bool HasNoValue => !HasValue;
因此,如果 NoHasValue 为假,我知道值不为 Null。如您所见,我在调用 ToString()
之前在值 属性 上添加了允许空值的运算符
我在我的项目中启用了 Nullable <Nullable>enable</Nullable>
但是,我仍然收到以下警告:
Warning CS8603 Possible null reference return.
如果我添加了 null-forgiving 运算符,为什么我会收到此警告?
你的问题的直接答案是 Object.ToString()
returns string?
,所以你需要在 .ToString()
调用结束时使用 null-forgiving 运算符
您可以使用 MemberNotNullWhen
属性告诉编译器当 HasNoValue
属性 为 false 时 Value
属性 不会为 null
[MemberNotNullWhen(false, nameof(HasNoValue))]
public object? Value { get; set; }
我有以下方法来覆盖 ToString()
public override string ToString()
{
if (HasNoValue)
return "No value";
return Value!.ToString();
}
如果 HasNoValue returns 为真,则值 属性 包含空值,因此返回“无值”。
HasNoValue 属性(和 HasValue)如下所示:
public bool HasValue => value != null;
public bool HasNoValue => !HasValue;
因此,如果 NoHasValue 为假,我知道值不为 Null。如您所见,我在调用 ToString()
之前在值 属性 上添加了允许空值的运算符我在我的项目中启用了 Nullable <Nullable>enable</Nullable>
但是,我仍然收到以下警告:
Warning CS8603 Possible null reference return.
如果我添加了 null-forgiving 运算符,为什么我会收到此警告?
你的问题的直接答案是 Object.ToString()
returns string?
,所以你需要在 .ToString()
调用结束时使用 null-forgiving 运算符
您可以使用 MemberNotNullWhen
属性告诉编译器当 HasNoValue
属性 为 false 时 Value
属性 不会为 null
[MemberNotNullWhen(false, nameof(HasNoValue))]
public object? Value { get; set; }