У меня есть класс LinkedList, где у каждого узла есть данные, и их данные имеют общий тип T.
public class LinkedList<T> where T : IComparable
{
}
В его методах я сравниваю данные узлов, но, как известно, тип объекта не реализует IComparable,
LinkedList <int> listTest = new LinkedList<int>(); //it's OK
LinkedList <object> listTest2 = new LinkedList<object>(); //it doesn't work
но как я могу сравнить все типы, которые могут быть вместо T?
IComparable
, вы можете использовать только типы, реализующие этот интерфейс. Это то, что делают общие ограничения. Типobject
не реализует какие-либо интерфейсы. - person Flydog57   schedule 07.03.2021object
может быть что угодно, любое сравнение не имеет смысла. Тем не менее, аналогичная функциональность (например,IEnumerable<T>.OrderBy
позволяет вызывающему передатьIComparer<T>
, вы можете создать ту же конструкцию для своегоLinkedList<T>
, а затем создать собственныйIComparer<object>
. Однако имейте в виду, что, как иIEnumerable<T>.OrderBy
, вам может потребоваться генерировать исключения во время выполнения, когда нет сравнение возможно - person Knoop   schedule 07.03.2021