2016-07-15 133 views
1

我試圖將字符串轉換爲double。如果它遇到空值,那麼值應該是0(零)。但是,它出現了一條錯誤消息:使用double.Parse,如果空值,則值替換爲0

「Operator'??' ??不能應用於類型的操作數「雙」和「雙師型」這有點令人困惑,因爲這兩個數字是雙我如何解決這個問題

double final = double.Parse(min.ToString()) ?? 0.0; 
+0

什麼'min'的類型?你能分享一個完整的例子嗎? – smarx

+2

錯誤的原因是''''左邊必須是可以爲空的類型。 'double'永遠不能爲空,所以使用''''是沒有意義的。 – smarx

回答

5

也許這個假設minstring

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.

+0

哇,謝謝Smarx!它的工作原理:)只要堆棧溢出允許我將它標記爲已回答。 – Bjorn

0

出現此錯誤的原因的左側?必須是可空的類型,可以將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.