首页 > 解决方案 > 如何检查泛型类型是否为 IComparable 然后比较是否是?

问题描述

我试图弄清楚如何做类似下面的伪代码:

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# 中实现这一点?

标签: c#genericsicomparable

解决方案


您可以使用is类型模式将结果分配给变量并使用它来调用Compare. 您也不需要转换bIComparable<T>,因为CompareTo接受T类型的参数(并且已经bT

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
}

推荐阅读