Thursday, February 12, 2015

Method with C# Generic Cannot Have == (Equality) or Comparison Operator


You have written a function like the following;

       static Boolean IsV1GtV2(T v1, T v2)
            return v1 > v2;

And you get a compiler error stating;

Operator '>' cannot be applied to operands of type 'T' and 'T'

The error is reasonable, since there is no gurantee that some generic type T would support comparison.

The Following will Also Break

So next you could have tried.

return (int) v1 > (int) v2;

And you still cannot get that to work. 


The only real way it works (for me at least) is to work the code this way. 

            if (typeof (T) == typeof (System.Int32))
                return (int) (object) v1 > (int) (object) v2;

You wold, of course, need to add this type of block for every possible type that you plan to use.

No comments: