我試圖將字符串轉換爲double。如果它遇到空值,那麼值應該是0(零)。但是,它出現了一條錯誤消息:使用double.Parse,如果空值,則值替換爲0
「Operator'??' ??不能應用於類型的操作數「雙」和「雙師型」這有點令人困惑,因爲這兩個數字是雙我如何解決這個問題
double final = double.Parse(min.ToString()) ?? 0.0;
我試圖將字符串轉換爲double。如果它遇到空值,那麼值應該是0(零)。但是,它出現了一條錯誤消息:使用double.Parse,如果空值,則值替換爲0
「Operator'??' ??不能應用於類型的操作數「雙」和「雙師型」這有點令人困惑,因爲這兩個數字是雙我如何解決這個問題
double final = double.Parse(min.ToString()) ?? 0.0;
也許這個假設min
是string
:
double final = double.Parse(min ?? "0");
或許:
double final = (min == null) ? 0 : double.Parse(min);
編輯
更妙的是:
double final = Convert.ToDouble(min);
每the documentation,該方法將返回
A double-precision floating-point number that is equivalent to the number in value, or 0 (zero) if value is null.
哇,謝謝Smarx!它的工作原理:)只要堆棧溢出允許我將它標記爲已回答。 – Bjorn
出現此錯誤的原因的左側?必須是可空的類型,可以將null作爲值。
在你的代碼:
double final = double.Parse(min.ToString()) ?? 0.0;
您正在使用??
運營商呼籲Null-coalescing operator什麼這個操作員做的是檢查是否double.Parse(min.ToString())
__evaluates的值有double
類型(這是值類型)_是無論是否爲空。如果它不爲空,則將該值分配給final
,否則將其分配給0.0
。
由於double
是值類型和值類型變量不能爲空,除非他們是Nullable,你會得到一個錯誤,這就是爲什麼你收到此錯誤:
「操作員‘?’不能應用於'double'和'double'類型的操作數。「
爲了解決這個問題,你可以試試這個:
double final = Convert.ToDouble(min);
其返回零,如果min
爲空。
PS:儘量避免使用Parse
方法,它拋出System.FormatExceptoin
當它無法解析,使用TryParse
代替:
string min = "2.s"; // not a number
double finals;
bool successed = double.TryParse(min, out finals); // true if successed, otherwise false.
Console.WriteLine(successed? $"Yes! finals = {finals}": $"No :(finals = {finals}");
// finals is 0 if the parse didn't work.
什麼'min'的類型?你能分享一個完整的例子嗎? – smarx
錯誤的原因是''''左邊必須是可以爲空的類型。 'double'永遠不能爲空,所以使用''''是沒有意義的。 – smarx