[Mono-list] Operator overloading
David Henderson
dnadavewa at yahoo.com
Sat Jan 8 00:17:00 EST 2011
Ah, Got it! Thanks!!
Would have been nice if I could have found some documentation leading me to that
solution. Is there a good site or text I should be using? The ones I have
evidently stink...
----- Original Message ----
From: Jonathan Pryor <jonpryor at vt.edu>
To: David Henderson <dnadavewa at yahoo.com>
Cc: Mono List <mono-list at lists.ximian.com>
Sent: Fri, January 7, 2011 7:35:05 PM
Subject: Re: [Mono-list] Operator overloading
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
More information about the Mono-list
mailing list