[Mono-list] Possible mcs bug: CS0019 detected for comparable instances
Rodolfo Campero
rodolfocampero@hotmail.com
Sun, 19 Oct 2003 23:59:45 +0000
Hello Miguel,
>From: Miguel de Icaza <miguel@ximian.com>
>To: Rodolfo Campero <rodolfocampero@hotmail.com>
>CC: mono-list@lists.ximian.com
>Subject: Re: [Mono-list] Possible mcs bug: CS0019 detected for
>comparableinstances
>Date: 19 Oct 2003 16:11:33 -0400
>
>Hello,
>
> > I'm trying to port an application I'm developing at work. Over there we
>use
> > Microsoft .Net SDK.
> > When I tried to compile it in mono I got:
> >
> > error CS0019: Operator != cannot be applied to operands of type `xxx'
>and
> > `yyy'
>
> >From my reading of the ECMA spec, this is a bug in the Microsoft C#
>compiler.
>
>Section 14.9.6 "Reference type equality operators" states that there
>must be a standard implicit conversion from the type of either operand
>to the type of the other operand.
Yes, you're right, I think I jumped over that statement when I read the
spec... I filed the bug report because it works in Microsoft's csc, and I
missintepreted the following quote (also from 14.9.6):
"It is a compile-time error to use the predefined reference type equality
operators to compare two "references that are known to be different at
compile-time."
I got confused by the part that reads "...that are *known* to be different
at compile-time." In fact, as I wrote in a later email, is not possible to
state at compile-time if an object referenced through the interface of a
class not sealed implements another interface. But what I was missing is
that the quoted text is just an implication of the rule; just because two
references are _not known_ to be different at compile-time doesn't means
that is OK to compare them directly.
Anyway, casting explicitly to "object" any of the two references that I'm
trying to compare does the trick.
I apologise for the bug report, I should have been more careful and read the
spec thoroughly. Sorry for the inconvenience.
>
>Miguel
>
> > I've narrowed down the problem and the smallest program which reproduces
>the
> > error is the following one:
> >
> > using System;
> > namespace Test {
> > public class Test {
> > public static void Main(string[] args) {
> > BaseClass baseRef = new DerivedClass();
> > ITest interfaceRef = (ITest)baseRef;
> > Console.WriteLine("Is this wrong? {0}", (interfaceRef!=baseRef));
> > }
> > }
> >
> > public interface ITest {}
> >
> > public class BaseClass {}
> >
> > public class DerivedClass: BaseClass, ITest {}
> > }
> >
>
>_______________________________________________
>Mono-list maillist - Mono-list@lists.ximian.com
>http://lists.ximian.com/mailman/listinfo/mono-list
Yours sincerely,
Rodolfo
_________________________________________________________________
STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
http://join.msn.com/?page=features/junkmail