2012-03-19 1 views
2

키네크로 기록 된 견인 물체가 만지면 좋아하게됩니다. 이를 위해 나는 모양의 종류 (handArea)와 (DangerArea)를 정의합니다.Visual Studio의 Contains()가 작동하지 않습니다.

private bool checkAreaViolation(List<MCvBox2D> DangerAreas, List<MCvBox2D> HandAreas) 
{ 
    int zaehler; 
    int ZaehlerDA; 
    int Test; 
    String TestS; 
    Test = 0; 
    ZaehlerDA= 0; 
    foreach (MCvBox2D DangerBox in DangerAreas) 
    { 
     zaehler = 0; 
     ZaehlerDA++; 
     foreach (MCvBox2D HandBox in HandAreas) 
     { 
      if(zaehler<=HandAreas.Count-1) 
       if (DangerAreas.Contains(HandAreas[zaehler])==true) 
        return true; 

      PointF[] handVertices = HandBox.GetVertices(); 
      for (int i = 0; i < handVertices.Length; i++) 
      { 
       if (PointInPolygon(handVertices[i], DangerBox.GetVertices())) 
       { 
        return true; 
       } 
       zaehler++; 
      } 
     } 
    } 
    return false; 
} 

불행하게도 if (DangerAreas.Contains(HandAreas[zaehler])==true)가 전혀 작동하지 않습니다 충돌 감지를 위해 나는 follwing을 코드를 작성했습니다.

아무도 이유를 알고 있습니까?

+2

이 C의 #보다는 C++과 같은 기준으로 비교되고 싶지 필드 fieldName은 교체하십시오. 잘못된 태그를 사용하고 있습니다. – Eugene

+0

나는 C#과 잘 어울리지 않는다. VB에서 일반적으로 Strings를 포함하고 있는데, C#에서도 동일하고, 'DangerArea'가 있는지 확인하지 않아도된다! = 아무것도 없다. – user959631

답변

1

System.Collections.Generic.List<t>.Contains은 목록에 exact 요소가 포함되어 있는지 확인합니다. 이것은 실제로 거의 일어나지 않을 것입니다. 교차 또는 포함 영역을 실제로 확인하려는 것 같습니다. (당신은 간단한 Linq 쿼리로 이것을 할 수 있습니다.)

0

012q을 Linq로 시도하고 임의의 표현식을 사용하여 특정 속성을 가진 객체가 있는지 알아볼 수 있습니다.

1

IEquatable 인터페이스를 구현하고 Equals (T other) 메서드를 오버로드해야하므로 컴파일러는 Contains() 메서드를 수행 할 때 비교할 필드를 알고 있어야합니다.

public class MCvBox2D:IEquatable<MCvBox2D> 
    { 
    .............. 

    private override bool Equals(MCvBox2D other) 
    { 
     if(this.fieldName==other.fieldName) 
      return true; 
    } 

    .............. 
    } 

참고 : 당신이