C# 제네릭메서드 안에서 객체 비교 문제

Featured image

Git Source


static void Main(string[] args)
{
    var animals = new List<Animal>()
    {
        new Animal("Tiger", 5),
        new Animal("Lion", 8),
        new Animal("Tiger", 6),
        new Animal("Tiger", 4),
    };

    var tiger = new Animal("Tiger", 5);

    Console.WriteLine($"Same Animal count : {GetSameObejct(tiger, animals)}");

    var persons = new List<Person>()
    {
        new Person("Json", 5),
        new Person("Mika", 8),
        new Person("Mika", 6),
        new Person("Json", 4),
    };

    var person = persons[0];

    // 컴파일러 에러 : CS0311
    Console.WriteLine($"Same Animal count : {GetSameObejct(person, persons)}");
}

private static int GetSameObejct<T>(T target, List<T> animals)
    where T : IEquatable<T>
{            
    return animals.Where(animal => target.Equals(animal)).Count();
} 

class Animal : IEquatable<Animal> { ... }

class Person { ... }

Reference

형식 매개 변수에 대한 제약 조건