Как проверить, является ли тип Generi c IComparable, а затем сравнить, если да? - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь понять, как сделать что-то вроде псевдокода ниже:

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#?

1 Ответ

2 голосов
/ 29 мая 2020

Вы можете использовать is шаблон типа , чтобы присвоить результат переменной и использовать ее для вызова Compare. Вам также не нужно преобразовывать b в IComparable<T>, поскольку CompareTo принимает параметр типа Tb уже T)

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

Другой вариант - для применения общего c ограничения с IComparable<T> интерфейсом

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