C# 如何抑制三元运算符对未执行结果的求值

C# 如何抑制三元运算符对未执行结果的求值,c#,.net,C#,.net,我在试图从值字典中设置一组数字表单控件时遇到问题。我希望在尝试设置数字控件的值之前,能够检查字典中是否存在相应的键 我的问题是,三元运算符计算两个结果表达式,即使只使用其中一个表达式。这会从字典中引发“找不到键”异常 只有当相应的键存在时(如果不是0),是否有一种简单的方法将数字表单控件设置为字典中的值 (Position是一个enum和mycoordinal是一个包含轴列表的struct) Dictionary pos=DataManager.Instance.ToolChanger.GetP

我在试图从值字典中设置一组数字表单控件时遇到问题。我希望在尝试设置数字控件的值之前,能够检查字典中是否存在相应的键

我的问题是,三元运算符计算两个结果表达式,即使只使用其中一个表达式。这会从字典中引发“找不到键”异常

只有当相应的键存在时(如果不是0),是否有一种简单的方法将数字表单控件设置为字典中的值

Position
是一个
enum
mycoordinal
是一个包含轴列表的
struct

Dictionary pos=DataManager.Instance.ToolChanger.GetPositionCoordinates();
pos1TNumeric.Value=pos.ContainsKey(Position.electrocation01)?0M:(十进制)位置[Position.electrocation01]。轴[EDMAxis.T];
pos2TNumeric.Value=pos.ContainsKey(Position.electrocation02)?0M:(十进制)位置[Position.electrocation02]。轴[EDMAxis.T];
pos3TNumeric.Value=pos.ContainsKey(Position.electrocation03)?0M:(十进制)位置[Position.electrocation03].轴[EDMAxis.T];
pos4TNumeric.Value=pos.ContainsKey(Position.electrocation04)?0M:(十进制)位置[Position.electrocation04]。轴[EDMAxis.T];
位置5T数值=位置ContainsKey(位置05)?0M:(十进制)位置[Position.electrocation05]。轴[EDMAxis.T];

我当前的解决方案可能只是生成一个包装器函数,该函数被传递字典键并返回正确的十进制值。我想知道是否有更简单的方法。谢谢

我认为你必须改变你的陈述:

pos1TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition01) ? (decimal)pos[Position.ElectrodePosition01].Axes[EDMAxis.T] : 0M;
因此,如果键存在,则取该值。否则采用默认值

 var value = bool_expression ? if_true : if_false;

我认为你必须改变你的陈述:

pos1TNumeric.Value = pos.ContainsKey(Position.ElectrodePosition01) ? (decimal)pos[Position.ElectrodePosition01].Axes[EDMAxis.T] : 0M;
因此,如果键存在,则取该值。否则采用默认值

 var value = bool_expression ? if_true : if_false;

三元运算符计算两个结果表达式,即使只使用其中一个表达式
这是错误的。它不做这种事。如果正在计算该操作数,那么这就是所采用的路径。看起来我是个白痴,忘记了反转结果。。。。不考虑这个问题…@ Euf邪恶考虑使用<代码> TyGETValue方法来避免在字典中搜索TWICI无论如何都会编写自定义扩展方法。所有重复的代码都是难读和易出错的。@ JoePielPress,所以您必须恨LINQ。<代码>三元操作符,即使只有一个表达式,也会计算得到的表达式。它们将被使用,这是错误的。它不做这种事。如果正在计算该操作数,那么这就是所采用的路径。看起来我是个白痴,忘记了反转结果。。。。不考虑这个问题…@ Euf邪恶考虑使用<代码> TyGETValue方法来避免在字典中搜索Twiti将无论如何写入自定义扩展方法。所有重复代码都很难阅读和容易出错。@ JoePielPress,所以你一定恨LINQ。我想知道为什么投票正确答案。