2017-10-08 2 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 사이에 있는지 확인하는 것입니다. 내가 실제로하고있는 것은 fact that references are sent to lambda functions 때문에 0보다 작거나 같아야하므로 값이 동일하게 0인지 테스트하는 것입니다. 두 인스턴스의 값 fVal은 모두 0이므로 >=0<=0이어야합니다.

나는 내 조건을 올바르게 테스트 할 수 있도록 이것을 어떻게 설정할 수 있는지 정말 고민 중입니다. 어떤 제안?

+0

"값이 동일하면 테스트"는 무엇을 의미합니까? – Enigmativity

+0

좋아, 혼란스러워. 값이 0과 0.3 사이인지 테스트하고,> = 0과 <= 0인지 테스트 해보라고합니다. 그렇다면 어느 것입니까? – vesan

+0

0에서 0.3 사이인지 테스트하고 싶습니다. 내가 실제로하고있는 것은 람다 함수/참조 자료 때문에 0과 0 사이에 있는지 테스트하는 것입니다. 어쨌든, 나는 수수께끼가 풀린 것 같아요! – PearsonArtPhoto

답변

2

람다가 fval이라는 변수를 다시 사용하고 있습니다.이 변수는 foreach의 범위 밖에 정의되어 있습니다.

이 줄을 이동하십시오 foreach 내부

float fVal; 

은 당신이 원하는 방식으로 작동해야한다.

+0

나는 그것이 정말로 간단한 무엇인가이어야한다라는 것을 알고 있었다. .. 그것은 트릭을했던 것처럼 보인다, 이것을 해결하려고 노력하고있는 또 다른 시간의 비참을 저장하기위한 감사! – PearsonArtPhoto

관련 문제