2017-10-08 10 views
1

設定ファイル(XMLファイル、FYI)から取得した値に基づいて条件をテストしたいと思います。私がチェックを行うには、このような何かを持っている:定義された変数を使用するラムダ関数

List<Condition> conditions = new List<Condition>(); 
float fVal; 
foreach (XmlAttribute attr in conNode.Attributes) 
{ 
    switch (attr.Name.ToLower()) 
    { 
     case "alt_max": 
      fVal = float.Parse(attr.Value); 
      conditions.Add((t) => { return t.altitude <= fVal; }); 
      break; 
     case "alt_min": 
      fVal = float.Parse(attr.Value); 
      conditions.Add((t) => { return t.altitude >= fVal; }); 
      break; 

.... 

私は私の条件がこれらの条件の両方がチェックされたように設定していた場合、最後の値だけが生き残るだろう。 IE

<condition alt_max="0.3" alt_min="0"/> 

は、私は何をしたい値(この場合はt.altitude)は0と0.3の間にあるかどうかを確認することです。私が実際にやっていることは、値が同じか0であるかどうかをテストすることです。これは、fact that references are sent to lambda functionsのために0より小さくて0より大きくなければなりません。両方のインスタンスの値fValは0であるため、>=0<=0でなければなりません。

私は自分の条件を適切にテストできるようにこれを設定する方法を本当に苦労しています。助言がありますか?

+0

「値が同じであることをテストする」とは何を意味しますか? – Enigmativity

+0

OK、私は混乱しています。あなたは、値が0と0.3の間であるかどうかをテストし、> 0で<= 0であるかどうかをテストしたいとします。それはどちらですか? – vesan

+0

0と0.3の間であるかどうかをテストします。私が実際にやっていたことは、ラムダ関数/リファレンスのため0と0の間であったかどうかを調べることでした。いずれにせよ、私は謎が解決されたと思います! – PearsonArtPhoto

答えて

2

あなたのラムダはfvalという変数を再利用しています。これはforeachの範囲外に定義されています。

この行を移動:foreach内部

float fVal; 

は、それはあなたが望むように動作させる必要があります。

+0

私はそれが本当にシンプルなものでなければならないことを知っていました...それはこのトリックをやったようです、これを解決しようとしている別の時間の悲惨さを救ってくれてありがとう! – PearsonArtPhoto

関連する問題