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; }