2017-06-13 1 views
0

値の辞書から数値フォームコントロールを設定しようとして問題が発生しています。私は数値コントロールの値を設定しようとする前に、対応するキーが辞書に存在するかどうかを確認できるようにしたい。3進演算子が未実行の結果を評価しないようにする方法

私の問題は、三項演算子は、それらのうちの1つだけが使用されても、両方の結果の式を評価するということです。これにより、辞書から「キーが見つかりません」という例外がスローされます。

対応するキーが存在する場合(および0でない場合)にのみ、数値形式のコントロールを辞書の値に簡単に設定できますか?

私の現在のソリューションは、おそらく辞書のキーを渡されるラッパー関数を作るために起こっている

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]; 

PositionenumMyCoordinateが軸のリストを含むstructである)、正しい小数を返します。値。私は簡単な方法があるのだろうかと思っています。ありがとう!

+5

'3項演算子は、どちらか一方のみが使用されても、両方の結果の式を評価します。これはfalseです。そんなことはありません。そのオペランドが評価されている場合は、そのパスが取得されます。 – 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するのだろうか –

関連する問題