2017-06-13 57 views
0

我遇到問題,試圖從值字典中設置一堆數值表單控件。我希望能夠在嘗試設置數值控件的值之前檢查相應的鍵是否存在於字典中。如何禁止三元運算符評估未執行的結果

我的問題是,三元運算符評估兩個結果表達式,即使只有其中一個將被使用。這會從Dictionary中拋出一個「Key not found」異常。

只有相應的鍵存在(如果不是0),是否有一種簡單的方法可以將數字表單控件設置爲字典中的值?

PositionenumMyCoordinate是包含軸的列表中struct

Dictionary<Position, MyCoordinate> pos = DataManager.Instance.ToolChanger.GetPositionCoordinates(); 

pos1TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition01) ? 0M : (decimal)pos[Position.ElectrodePosition01].Axes[EDMAxis.T]; 
pos2TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition02) ? 0M : (decimal)pos[Position.ElectrodePosition02].Axes[EDMAxis.T]; 
pos3TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition03) ? 0M : (decimal)pos[Position.ElectrodePosition03].Axes[EDMAxis.T]; 
pos4TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition04) ? 0M : (decimal)pos[Position.ElectrodePosition04].Axes[EDMAxis.T]; 
pos5TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition05) ? 0M : (decimal)pos[Position.ElectrodePosition05].Axes[EDMAxis.T]; 

我目前的解決方案很可能將只是使傳遞的辭典鍵的包裝功能,並返回正確的十進制值。我想知道是否有更簡單的方法。謝謝!

+5

'三元運算符評估兩個結果表達式,即使只有其中一個將被使用'這是錯誤的。它沒有這樣的事情。如果該操作數正在被評估,那麼這就是正在採取的路徑。 – Servy

+4

看起來像我是一個白癡,忘了顛倒我的結果....無視這個問題... – EMUEVIL

+0

@Servy你是完全正確的,我忘了顛倒我的結果 – EMUEVIL

回答

4

我認爲你必須選擇你的語句:

pos1TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition01) ? (decimal)pos[Position.ElectrodePosition01].Axes[EDMAxis.T] : 0M; 

因此,如果鍵存在,你拿價值。否則採取您的默認值。

var value = bool_expression ? if_true : if_false; 
+0

我想知道爲什麼downvoting正確的答案 –