簡體   English   中英

"Non-Nullable 在返回時變為 Nullable"

[英]Non-Nullable becomes Nullable on return

我想我在某個地方看到過這個問題的答案,但我找不到它,也不記得答案了。

假設 Nullable-Reference-Types 已啟用。

有一個返回string的方法。 該方法的調用者將結果字符串存儲到一個變量中。 該變量將為 Nullable,即使方法的返回值不可為空。

static string MyMethod() 
{
   return "Hello World!";
}

public static void Main() 
{
   // result is of type string? here. Hence nullable.
   var result = MyMethod();

   // result2 is also nullable here.
   string result2 = MyMethod();
}

原始類型似乎不會發生同樣的情況,但它確實會發生引用類型,例如object 有點違背了 NRT 對我的目的。 我敢肯定這是有原因的,而且是“設計使然”。

這確實是設計使然。

選擇此設計的會議記錄在這里: https<\/a> :\/\/github.com\/dotnet\/cshaplang\/blob\/main\/meetings\/2019\/LDM-2019-12-18.md#var

總結一下:人們經常不得不顯式地鍵入變量而不是使用var<\/code> ,因為在從非空返回方法進行賦值之后,代碼繼續將null<\/code>賦給變量。

引用會議記錄:

在這一點上,我們已經看到大量代碼需要人們拼出類型而不是使用 var,因為代碼稍后可能會分配 null。

也就是說,發現如下代碼非常頻繁:

請注意(正如 Jeroen Mostert 所指出的)您的問題中的result2<\/code>不可為空,因為它被明確鍵入為不可為空。 我不確定您為什么認為它可以為<\/em>空,但絕對不是。

例如,查看 DotNetFiddle 上的這個 repro<\/a>並注意第 11 行的警告。

在 C# 8.0 中,字符串被稱為可以為空的“字符串!”,因此 Allow Null 注釋允許將其設置為 null,即使我們返回的字符串不是 null(例如,我們進行比較檢查並將其設置為如果為 null,則為默認值。)

"

暫無
暫無

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

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