Я впервые столкнулся с дженериками и немного их понимаю. У меня есть метод, предназначенный для приема двух списков любых объектов, сравнения их различными способами и возврата совпавших/несовпавших объектов (материал внутри метода, вероятно, не является ключевым здесь). Цель - принимать любые объекты, будь то клиенты или что-то еще. Однако я столкнулся с проблемой, когда метод принимает '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
...
Есть ли способ позволить этому методу принимать списки, будь они строковые или других классов? Или ярлык, чтобы поместить списки строк в тип, который будет принят?