c# Generics: Передача List методу, который ожидает List

Я впервые столкнулся с дженериками и немного их понимаю. У меня есть метод, предназначенный для приема двух списков любых объектов, сравнения их различными способами и возврата совпавших/несовпавших объектов (материал внутри метода, вероятно, не является ключевым здесь). Цель - принимать любые объекты, будь то клиенты или что-то еще. Однако я столкнулся с проблемой, когда метод принимает 'string', полагаю, потому что он не инициализируется ключевым словом new() и не является обычным инстанцированным классом.

Итак, у меня есть объявление метода следующего вида:

public static compareResult<T> stepCompare<T>(List<T> leftList, List<T> rightList, Comparison<T> IDComparer = null, Comparison<T> lowLevelComparer = null, bool confirmUniqueness = true) where T : IComparable, new()

Признаться, добавление в конце условия where было сделано в ответ на ошибку "cannot create an instance of the variable type 'T' because it does not have the new() constraint". Это произошло на фоне строки в методе, гласящей

T lastItem = new T();

Однако теперь, если я попытаюсь передать ему два Lists, он говорит: "'string' должен быть неабстрактным типом с публичным конструктором без параметров, чтобы использовать его в качестве параметра 'T' в общем типе или методе 'MF. Comparers.stepCompare(System.Collections.Generic.List, System.Collections.Generic.List, System.Comparison, System.Comparison, bool)'...

Есть ли способ позволить этому методу принимать списки, будь они строковые или других классов? Или ярлык, чтобы поместить списки строк в тип, который будет принят?

5
задан Marc Gravell 9 May 2011 в 06:17
поделиться