У меня был первый набег на дженерики, и я их немного понимаю.У меня есть метод, предназначенный для приема двух списков любого объекта, сопоставления их различными способами и возврата совпадающих / несопоставленных объектов (вещи внутри метода, вероятно, здесь не являются ключевыми).Цель состоит в том, чтобы принять любой тип объекта, будь то клиенты или что-то еще.Тем не менее, я столкнулся с трудностью, заставляя его принимать '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 в конце было в ответ на ошибку "не может создать экземпляр типа переменной" T ", потому что у него нет нового() ограничение ".Это появилось против строки в методе, говорящей
T lastItem = new T();
Однако, теперь, если я пытаюсь передать два Lists<string>
, он говорит: "'string' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'T' in the generic type or method 'MF.Comparers.stepCompare<T>(System.Collections.Generic.List<T>, System.Collections.Generic.List<T>, System.Comparison<T>, System.Comparison<T>, bool)'
...
Любой способпусть этот метод принимает списки, будь то строки или других классов? Или ярлык для помещения списков строки в тип, который будет принят?