[Mono-dev] strange behaviour with generics

Felipe Portella felipeportella.listas at gmail.com
Tue Nov 20 20:15:34 EST 2007


I am using version of Mono and I am having some troubles in using a
generic parameter in a method, which seems to be a bug .

The following code compiles fine:

using  System;

namespace  TestMethodParameterTypeMono
    class   Program
      static   void  Main( string [] args)
          Class1 < double > myClass1 = new   Class1 < double >();
          int  i = myClass1.MethodB< DoubleCalculator >();

    public   interface   ICalculator <T>
      T Add(T a, T b);

    public   struct   DoubleCalculator  : ICalculator < double >
      public   double  Add( double  a, double  b)
          return  a + b;

    public   class   Class1 <T>
      where  T : IComparable <T>
      private   int  i = 5;
      public   int  MethodB<C>() where  C : ICalculator <T>, new ()
          return  i;

On the other hand, if I take the class Program and put it in a different
file and compile it isolated making a reference to the previous generated
.exe, the following compilation error appears:

Program.cs(13,27): error CS0309: The type
`TestMethodParameterTypeMono.DoubleCalculator' must be convertible to
TestMethodParameterTypeMono.DoubleCalculator>' in order to use it as
parameter `C' in the generic type or method

Note that the constraint on type parameter C on MethodB is to implement
ICalculator<double>, which DoubleCalculator does, instead of
ICalculator<DoubleCalculator> as the message suggests.

Am I missing something or is it really a bug? The separate class Program
compiles fine in Visual Studio 2005 making the reference.

Felipe Portella
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20071120/05817e63/attachment.html 

More information about the Mono-devel-list mailing list