C # универсальный метод, отклоняющий тип, даже если он реализует необходимый интерфейс - PullRequest
1 голос
/ 10 мая 2011

Надеюсь, я правильно это описал.У меня есть «универсальный метод», который выглядит следующим образом.Он принимает список любого типа Icomparable / Iequatable и возвращает класс 'compareResult', показанный ниже, содержащий списки совпадающих / несопоставленных элементов.

public partial class Comparers
{
    public class compareResult<T>
    {
        public List<T> unchangedItems;
        public List<T> changedItems;
        public List<T> leftOrphans;
        public List<T> rightOrphans;
    }

    public static compareResult<T> stepCompare<T>(List<T> leftList, List<T> rightList, bool confirmUniqueIDs = true) where T : IEquatable<T>, IComparable
    {
        ...

Теперь я пытаюсь передать список 'LicencedCustomer', которыйопределено, как показано ниже, и реализует методы CompareTo и Equals для реализации интерфейсов IComparable / IEquatable.

public class LicencedCustomer : IEquatable<LicencedCustomer>, IComparable<LicencedCustomer>
    {

        public string LMAA_CODE {get; set;}
    ...

Теперь я попытаюсь передать два списка клиентов в следующем порядке:

Comparers.compareResult<LicencedCustomer> result = new Comparers.compareResult<LicencedCustomer>();

result = Comparers.stepCompare(leftList, rightList);

Ноон говорит: «Ошибка 1 Тип« MFTests.LicencedCustomer »нельзя использовать в качестве параметра типа« T »в универсальном типе или методе« MF.Comparers.stepCompare (System.Collections.Generic.List, System.Collections.Generic.List,bool) '. Не существует неявного преобразования ссылок из' MFTests.LicencedCustomer 'в' System.IComparable '...

Я думал, что реализовал IComparable, хотя это относится к преобразованию, которое я не совсем понимаю.Извините за длинное объяснение, я старался сделать его как можно более кратким.

Есть мысли о том, что я делаю неправильно?

1 Ответ

5 голосов
/ 10 мая 2011

Универсальный метод не включает в себя идентификатор универсального типа, T.

where T : IEquatable<T>, IComparable

должен быть

where T : IEquatable<T>, IComparable<T>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...