2017-06-13 56 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正确的答案 –