On Jan 7, 2011, at 8:35 PM, David Henderson wrote:
> OK.  I have been trying to no avail to overload the > and < operators on a 
> struct I wrote.  This is extremely easy in C++, but seems to not work in C#.

You have properly overloaded operator< and operator>; they are not the problem.

> Here is the error I see at runtime:
> 
> Unhandled Exception: System.InvalidOperationException: The comparer threw an 
> exception. ---> System.ArgumentException: does not implement right interface

Admittedly the exception message doesn't tell you what interface is missing, 
but it does mention that you're not implementing an interface.

The problem is that the operators you're providing are static members, while 
interfaces (which the exception mentions) can only be implemented in via 
instance members.

In short: this isn't C++, and providing operator< does NOT automatically 
provide comparison for your type.

Instead, you need to implement either the System.IComparable or the 
System.IComparable<T> interfaces on your type, which will allow use of 
Comparer<T>.Default (which is what System.Array.qsort() is using):

        struct lodData : IComparable<lodData> {
                public int CompareTo (lodData other)
                {
                        if (getLOD() == other.getLOD())
                                return 0;
                        if (getLOD() < other.getLOD())
                                return -1;
                        return 1;
                }
                // ...
        }

 - Jon

_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to