Как проверить содержит ли List структуру с определенными полями?

Есть структура, обьект и лист:

Palyer{
   int data;
   int a;
   Col b;
};

List<Player> A;
Player B;

Нужно проверить:

(A[i].a == B.a && A[i].a == B.b) == true?

Можно ли сделать эту проверку типа так: A.Contains(B)? Я пробовал, но похоже, что A.Contains(B) проверяет:

(A[i].a == B.a && A[i].a == B.b && A[i].data==B.data) == true

Ответы (2 шт):

Автор решения: aepot

Можно так, "в лоб" с помощью Linq

if (A.Any(x => x.a == B.a && x.b == B.b && x.data == B.data))
{
    // содержит как минимум один такой элемент, но может и больше
}
else
{
    // не содержит
}
→ Ссылка
Автор решения: return

Складывается ощущение, что тут засели сплошные функциональщики, которые используют неэффективный с точки зрения оптимизации LINQ. Используйте старый как мир Array.Find / List.Find:

int FindIndex(List<Player> players, Player player)
{
    // checks

    return players.FindIndex(p => p.a == player.a && p.b == player.b);
}

Я не понимаю только 1-го: зачем вам struct Player?! Сделайте так:

public sealed class Entity
{
    public Vector2 Position { get; set; }
    public Vector2 Velocity { get; set; }
    public EntityBehavior Behavior { get; set; }
    public object Tag { get; set; }
    // ...

    public Entity(/*...*/) { /*...*/ }
}

Всегда переопределяйте Equals в структуре, т. к. стандартная реализация у структур сравнивает все поля через рефлексию. Рефлексию! Это оч. медленно (читайте Рихтера (CLR via C#)).

→ Ссылка