如何检查泛型类型是否为 IComparable,如果是则进行比较?

How to Check if a Generic Type is IComparable then Compare if so?

我正在尝试弄清楚如何执行类似下面的伪代码的操作:

private void test<T>(T a, T b)
{
    if (a is IComparable<T> && b is IComparable<T>)
    {
        int result = a.CompareTo(b);
        // do something with the result
    }
    else
    {
        // do something else
    }
}

如何在 C# 中实现?

您可以使用is type pattern将结果赋给一个变量并用它来调用Compare。您也不需要将 b 转换为 IComparable<T>,因为 CompareTo 接受 T 类型的参数(并且 b 已经是 T

if (a is IComparable<T> comparable)
{
    int result = comparable.CompareTo(b);
    // do something with the result
}

另一种选择是使用 IComparable<T> 接口应用通用约束

private void test<T>(T a, T b) where T : IComparable<T>
{
    var result = a.CompareTo(b);
    // do something with the result
}