Contains () в визуальной студии не работает - PullRequest
2 голосов
/ 19 марта 2012

Я пытаюсь выяснить, касаются ли объекты буксировки - записанные Kinec или нет.Для этого я определяю виды фигур (handArea) и (DangerArea).Для обнаружения столкновений я написал следующий код:

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) не работает вообще.

Кто-нибудь знает почему?

Ответы [ 3 ]

1 голос
/ 19 марта 2012

Вы должны реализовать интерфейс IEquatable и метод Equals (T other) с перегрузкой, чтобы теперь компилятор знал, какое поле нужно сравнивать при выполнении метода Contains ().

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

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

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

note: замените fieldName на поле, которое вы хотите сравнить на

1 голос
/ 19 марта 2012

System.Collections.Generic.List<t>.Contains проверяет, если и только если список содержит этот точный элемент.Это почти никогда не случится на практике.Похоже, вы действительно хотите проверить области для пересечения или включения вместо этого.(Вы можете сделать это с помощью простого запроса Linq)

0 голосов
/ 19 марта 2012

Попробуйте .Any() с Linq, и вы можете использовать любое выражение, чтобы выяснить, содержит ли оно какой-либо объект с определенным свойством.

...