Ack*_*ari 3 c# nullable nullable-reference-types
我在项目中启用可为空功能时遇到了这个问题。
在 Net 5.0 中,签名object.ToString()是
public virtual string? ToString ();
Run Code Online (Sandbox Code Playgroud)
这是为什么?给继承者的注释甚至指出
您的 ToString() 重写不应返回空或空字符串。
那么为什么签名说可以呢?我找不到任何相关信息。
但我的想法是
但由于我们希望将可空特性附带的警告视为错误,所以现在我们必须!在使用的任何地方添加或空检查ToString。
签名之所以如此,还有其他充分的理由吗?
对于那些没有阅读上述注释并从 ToString 方法返回 null 的人来说,具有向后可比性。
正是这样:现实世界中存在返回null. 有关完整详细信息,请参阅此讨论。
您会注意到,如果您在 VS 中编写自己的 ToString 方法,则返回类型默认为stringnot string?—— 这是为了鼓励您遵循指南。如果您使用定义了自己的方法并使用 NRT 的类型ToString,它可能也会返回string,并且您不需要对其进行 nullcheck。
object.ToString()返回的事实string?仅相关:
object,编译器不知道其重写的ToString方法是否实际返回string?或stringC c = new C();
string s1 = c.ToString(); // No warning
object o = c;
string s2 = o.ToString(); // Warning
public class C
{
public override string ToString() => "";
}
Run Code Online (Sandbox Code Playgroud)