2013-07-31 60 views
1

運營商給的問題,我有一個可爲空雙C#第三,如果可空雙

MyNullableDouble = MyDouble == 0 ? null : MyDouble; 

這引起了我一個問題:

無法確定條件表達式的類型,因爲沒有隱在''和'雙'之間的轉換

回答

5

你應該投Mydouble,otherwi SE在左邊你有型double?而在右側你有double,所以類型是不等價的(而這正是異常說):

MyNullableDouble = MyDouble == 0 ? null : (double?)MyDouble; 
+0

奇怪,因爲MyNullableDouble = MyDouble;沒有語法錯誤... – sprocket12

+0

是的,因爲double可以隱式轉換爲nullableDouble,但是第三級操作符以不同的方式工作,有很多關於此的問題:請參閱[this one](http://stackoverflow.com/問題/ 8155618 /隱式轉換問題在一個三元條件)例如,並按照各種重複的問題 –

+0

好的抱歉,我會搜查,但我不知道在那時會是這樣的問題。 – sprocket12

0

是的,你不能做這樣的,既值應該是相同的數據類型。任何具體原因使用叔..如果其他...

0

您可以實現一種通用的方法來處理這種情況。 由於所有空類型有GetValueOrDefault方法,可以寫爲不可爲空的結構相反的方法:

public static T? GetNullIfDefault<T>(this T value) 
     where T: struct 
    { 
     if(value.Equals(default(T))) 
     { 
      return null; 
     } 

     return value; 
    } 

使用示例:

MyNullableDouble = MyDouble.GetNullIfDefault();