将 IComparable<T> 传递给 CompareTo 时出错

Error while passing IComparable<T> to CompareTo

我有以下代码:

public class Foo<T>
{
    private IComparable<T> a { get; set; }
    
    public int foo(IComparable<T> b)
    {
        return a.CompareTo(b); // compile error : Argument type 'System.IComparable<T>' is not assignable to parameter type 'T?'
    }
}

Argument type 'System.IComparable' is not assignable to parameter type 'T?'

如何避免这个错误?

在 class 级别添加通用约束以确保 T 实现 IComparable<T>。然后将 属性 和参数类型中的 IComparable<T> 替换为 T.

public class Foo<T> where T : IComparable<T>
{
    private T a { get; set; }

    public int foo(T b)
    {
        return a.CompareTo(b);
    }
}