2016-04-25 32 views
1

我只是好奇什麼最佳實踐解決方案將得到我目前的情況。我有一個以ARGB整數形式存儲顏色的數據庫,但我允許它爲空,因爲有時可能不需要指定顏色。使用實體框架,我有一個帶有ColorArgb屬性的生成類,用於訪問返回的列和int,如預期的那樣。我還手動添加了另一個屬性Color,它返回一個System.Drawing.Color對象。 Color屬性幾乎只是一個過程,所以我可以以更自然的方式與生成的類進行交互。設置如此簡單:給定可能爲空的int時返回Color.FromArgb的最佳實踐C#

ColorArgb = value.ToArgb(); 

但是,獲得更有趣一點。這是我到目前爲止有:

return ColorArgb == null ? Color.Empty : Color.FromArgb(ColorArgb ?? 0); 

正如你所看到的,我想保持想法,一個顏色沒有必要爲這個類,所以我回到Color.Empty當底層ARGB值爲空,但空合併運算符的右側永遠不會到達。我保證這個值不是null,但我不知道如何以最佳實踐形式明確告訴編譯器。不是一個嚴重的問題,但我想學習。因此,非常感謝所有幫助。

編輯:ColorArgb類型爲System.Nullable<int>

+1

'ColorArgb'的類型是'int?'嗎? – ZoolWay

回答

0

您不必如果您知道該值不爲空使用空合併運算符。而是使用ColorArgb.Value

return ColorArgb == null ? Color.Empty : Color.FromArgb(ColorArgb.Value); 
+0

簡單。完善。太感謝了。 將盡快答覆。 –

+2

實際上,如果你想優化檢查值是否爲空,你應該使用'ColorArgb.GetValueOrDefault()'作爲'ColorArgb.Value'將再次檢查它是否爲空內部,但'GetValueOrDefault'將簡單地返回內部領域直接。但我懷疑這種情況甚至會有明顯的不同。 –

2

更簡潔的方法可以是這樣的,如果你需要黑色的零整數值。

return Color.FromArgb(ColorArgb.GetValueOrDefault()); 

否則,檢查空整型,你應該檢查.HasValue屬性,而不是像這樣的空比較。

return ColorArgb.HasValue ? Color.FromArgb(ColorArgb.Value) : Color.Empty; 
+1

感謝您的回覆!我只是做了一些挖掘,發現空比較被編譯爲調用'.HasValue'。仍然欣賞不同的視角。 –