【发布时间】:2021-06-05 05:34:18
【问题描述】:
我有一个 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 的使用。你能告诉我你想在这里达到什么目的吗?
-
@CaveCoder 好吧,我使用 CompareTo 方法来比较泛型类型。 CompareTo 可以比较整数、字符串等,但不能比较对象,因为对象没有实现 IComparable。我也想让比较对象成为可能。
-
但是为什么要使用对象呢?您需要创建一个具有更多派生类作为通用参数的列表
-
如果您的泛型类型被限制为只接受实现
IComparable的类型,那么您只能使用实现该接口的类型。这就是通用约束的作用。object类型不实现任何接口。 -
这几乎是要求比较苹果和橙子的能力...
object可以是任何东西,任何比较都是没有意义的。这就是说类似的功能(比如IEnumerable<T>.OrderBy允许调用者传递IComparer<T>,你可以为你的LinkedList<T>创建相同的结构,然后创建一个自定义IComparer<object>。但请记住,就像IEnumerable<T>.OrderBy你当无法进行比较时可能不得不抛出运行时异常
标签: c# object compare icomparable