我得到的確切警告是
'double double.Parse(string s) 中引數 's' 的可能空參考引數
try
{
// this is the line where it shows the warning as `input` can be null:
double grade = double.Parse(input);
book.AddGrade(grade);
}
catch (ArgumentException ex)
{
System.Console.WriteLine(ex.Message);
}
ArgumentNullException
決議函式可以拋出的不是屬于ArgumentException
,因此應該處理嗎?
我也知道TryParse
也可以使用,但作為一個完整的初學者,我想知道我做錯了什么。
uj5u.com熱心網友回復:
C# 編譯器在該行產生警告,因為引數 ofParse
被標記為“不可為空”,并且編譯器確定input
您傳遞給該呼叫的引數在呼叫點可以為空。編譯器不會將例外處理視為“安全處理空引數”的一種方式 - 相反,它會嘗試引導您首先避免例外。
在這種特殊情況下,您似乎希望不可決議的值存在于input
特定的方法中 -TryParse
這使得對所有無效輸入(包括null
)的處理統一(回傳 false)。在其他情況下,您應該顯式處理 null 值或查看并可能調整前面/呼叫代碼,以使編譯器(更重要的是代碼的人類讀者)清楚地知道 null 無法到達有問題的行。
旁注:通常,使用例外進行流控制(這是帖子中顯示的代碼所做的)被認為是反模式,應該避免。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/507083.html