簡體   English   中英

為什么 object.ToString 的簽名聲明它可以返回空值

[英]Why does the signature of object.ToString state that it can return a null value

我在我們的項目中啟用可空特性時遇到了這個問題。

在 Net 5.0 中, object.ToString()的簽名是

public virtual string? ToString ();

這是為什么? 給繼承人筆記甚至指出

您的 ToString() 覆蓋不應返回 Empty 或空字符串。

那么為什么簽名聲明它可以? 我找不到任何相關信息。

但我的想法是

  • 對於那些沒有閱讀上面提到的注釋並從他們的 ToString 方法返回 null 的人的向后可比性。
  • 讓閱讀上述筆記的人忽略它

但是由於我們要將可空特性帶來的警告視為錯誤,現在我們必須添加! 或者在我們使用ToString任何地方進行空檢查。

簽名保持原樣還有其他充分的理由嗎?

對於那些沒有閱讀上面提到的注釋並從他們的 ToString 方法返回 null 的人的向后可比性。

正是這樣:有現實世界的 ToString 實現會返回null 有關完整詳細信息,請參閱此討論

您會注意到,如果您在 VS 中編寫自己的 ToString 方法,返回類型默認為string而不是string? 但是——這是為了鼓勵您遵循這些准則。 如果您使用定義了自己的ToString方法並使用 NRT 的類型,它可能還會返回string ,並且您不需要對其進行空檢查。

object.ToString()返回string?的事實string? 僅相關:

  1. 當您將一個對象轉換為object並且編譯器不知道其重寫的ToString方法是否實際返回string? string
  2. 當您使用不受約束的泛型類型時,出於同樣的原因
C c = new C();
string s1 = c.ToString(); // No warning

object o = c;
string s2 = o.ToString(); // Warning

public class C
{
    public override string ToString() => "";
}

夏普實驗室

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM