我在尝试从值字典中设置一堆数字表单控件时遇到问题。我想在尝试设置Numeric控件的值之前能够检查字典中是否存在相应的键。
我的问题是,即使只使用其中一个,三元运算符也会计算两个结果表达式。这会从字典中抛出“Key not found”异常。
只有相应的密钥存在(如果不是0),是否有一种简单的方法可以将数字表单控件设置为字典中的值?
(Position
是enum
,MyCoordinate
是包含轴列表的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];
我当前的解决方案可能只是创建一个传递字典键的包装函数并返回正确的十进制值。我想知道是否有更简单的方法。谢谢!
答案 0 :(得分:4)
我认为你必须改变你的陈述:
pos1TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition01) ? (decimal)pos[Position.ElectrodePosition01].Axes[EDMAxis.T] : 0M;
因此,如果密钥存在,则获取该值。否则采用默认值。
var value = bool_expression ? if_true : if_false;