2014-09-24 3 views
1

Мне нужно создать общий метод, который возвращает больше двух параметров. Операторы> и < не работают. Вот подпись моего метода:Как сравнить два значения в общем методе?

public static T Greater<T>(ref T a, ref T b) 
{ 
    if (a > b) 
    { 
     return a; 
    } 
    else 
    { 
     return b; 
    } 
} 

Я довольно новобранец в C# и совершенно новый в родовых типах.

+0

Или http://stackoverflow.com/questions/390900/ косяк-оператор-быть применен к родовым-типам-в-с. –

+0

Как комментарий, связанный с сокращением, вы можете написать: return a.CompareTo (b)> 0? a: b; ' –

+0

Это не совсем дубликаты. Это касается сравнения равенства. Этот вопрос касается порядка/приоритета. – vcsjones

ответ

10

Поскольку T может быть любого типа, не гарантировано, что T перегрузит > или < операторов. Добавление IComparable<T> ограничения вы говорите, что T должны реализовать IComparable<T>, который содержит метод CompareTo, то вы можете использовать этот метод, чтобы сравнить свои объекты вместо:

public static T Greater<T>(ref T a, ref T b) where T : IComparable<T> 
{ 
    if(a.CompareTo(b) > 0) return a; 
    else return b; 
} 
+0

Спасибо, что работает. С вашей помощью обучение C# проще! :) – Box

Смежные вопросы