<font size="2">Hi,</font><br><br><font size="2">I am using version <a href="http://1.2.5.1">1.2.5.1</a> of Mono 
and I am having some troubles in using a generic parameter in a method, which 
seems to be a bug . </font><br><br><font size="2">The following code compiles 
fine:</font><br><br><br><font color="#0000ff" size="2">using</font><font size="2"> 
&nbsp;System;</font><br><br><font color="#0000ff" size="2">namespace</font><font size="2"> 
&nbsp;TestMethodParameterTypeMono</font><br><font size="2">{</font><br><font size="2">&nbsp; 
&nbsp;</font><font color="#0000ff" size="2"> class</font><font size="2"> &nbsp;</font><font color="#008080" size="2"> Program</font><br><font size="2">&nbsp; &nbsp;{</font><br><font size="2">&nbsp; &nbsp; &nbsp; </font><font color="#0000ff" size="2">static
</font><font size="2"> 
&nbsp;</font><font color="#0000ff" size="2"> void</font><font size="2"> &nbsp;Main(</font><font color="#0000ff" size="2"> string</font><font size="2"> [] args)</font><br><font size="2">&nbsp; &nbsp; &nbsp; {</font><br><font size="2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font>
<font color="#008080" size="2"> Class1</font><font size="2"> &lt;</font><font color="#0000ff" size="2"> 
double</font><font size="2"> &gt; myClass1 = </font><font color="#0000ff" size="2">new</font><font size="2"> &nbsp;</font><font color="#008080" size="2"> 
Class1</font><font size="2"> &lt;</font><font color="#0000ff" size="2"> 
double</font><font size="2"> &gt;();</font><br><font size="2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font><font color="#0000ff" size="2"> int</font><font size="2"> &nbsp;i = 
myClass1.MethodB&lt;</font><font color="#008080" size="2"> 
DoubleCalculator</font><font size="2"> &gt;();</font><br><font size="2">&nbsp; &nbsp; &nbsp; 
}</font><br><font size="2">&nbsp; &nbsp;}</font><br><br><font size="2">&nbsp; &nbsp;</font><font color="#0000ff" size="2"> public</font><font size="2"> &nbsp;</font><font color="#0000ff" size="2"> interface</font><font size="2"> &nbsp;</font><font color="#008080" size="2">
 
ICalculator</font><font size="2"> &lt;T&gt;</font><br><font size="2">&nbsp; 
&nbsp;{</font><br><font size="2">&nbsp; &nbsp; &nbsp; T Add(T a, T b);</font><br><font size="2">&nbsp; 
&nbsp;}</font><br><br><font size="2">&nbsp; &nbsp;</font><font color="#0000ff" size="2"> 
public</font><font size="2"> &nbsp;</font><font color="#0000ff" size="2"> 
struct</font><font size="2"> &nbsp;</font><font color="#008080" size="2"> 
DoubleCalculator</font><font size="2"> &nbsp;: </font><font color="#008080" size="2">ICalculator</font><font size="2"> &lt;</font><font color="#0000ff" size="2"> 
double</font><font size="2"> &gt;</font><br><font size="2">&nbsp; &nbsp;{</font><br><font size="2">&nbsp; &nbsp; &nbsp; </font><font color="#0000ff" size="2">public</font><font size="2"> 
&nbsp;</font><font color="#0000ff" size="2"> double</font><font size="2"> &nbsp;Add(</font><font color="#0000ff" size="2"> double</font><font size="2"> &nbsp;a, </font><font color="#0000ff" size="2">double</font><font size="2"> &nbsp;b)</font>
<br><font size="2">&nbsp; &nbsp; &nbsp; 
{</font><br><font size="2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font><font color="#0000ff" size="2"> 
return</font><font size="2"> &nbsp;a + b;</font><br><font size="2">&nbsp; &nbsp; &nbsp; 
}</font><br><font size="2">&nbsp; &nbsp;}</font><br><br><font size="2">&nbsp; &nbsp;</font><font color="#0000ff" size="2"> public</font><font size="2"> &nbsp;</font><font color="#0000ff" size="2"> class</font><font size="2"> &nbsp;</font><font color="#008080" size="2">
 
Class1</font><font size="2"> &lt;T&gt; </font><br><font size="2">&nbsp; &nbsp; &nbsp; </font><font color="#0000ff" size="2">where</font><font size="2"> &nbsp;T : </font><font color="#008080" size="2">IComparable</font><font size="2"> &lt;T&gt;
</font><br><font size="2">&nbsp; 
&nbsp;{</font><br><font size="2">&nbsp; &nbsp; &nbsp; </font><font color="#0000ff" size="2">private</font><font size="2"> &nbsp;</font><font color="#0000ff" size="2"> 
int</font><font size="2"> &nbsp;i = 5;</font><br><font size="2">&nbsp; &nbsp; &nbsp; </font><font color="#0000ff" size="2">public</font><font size="2"> &nbsp;</font><font color="#0000ff" size="2"> int</font><font size="2"> &nbsp;MethodB&lt;C&gt;() </font>
<font color="#0000ff" size="2">where</font><font size="2"> &nbsp;C : </font><font color="#008080" size="2">ICalculator</font><font size="2"> &lt;T&gt;, </font><font color="#0000ff" size="2">new</font><font size="2"> ()</font><br>
<font size="2">&nbsp; &nbsp; &nbsp; {</font><br><font size="2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font><font color="#0000ff" size="2"> return</font><font size="2"> 
&nbsp;i;</font><br><font size="2">&nbsp; &nbsp; &nbsp; }</font><br><font size="2">&nbsp; &nbsp;}</font><br><font size="2">}</font><br><br><br><font size="2">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:</font><br><br><font size="2">Program.cs(13,27): error CS0309: The type 
`TestMethodParameterTypeMono.DoubleCalculator&#39; must be convertible to 
`TestMethodParameterTypeMono.ICalculator&lt;TestMethodParameterTypeMono.DoubleCalculator&gt;&#39; 
in order to use it as parameter `C&#39; in the generic type or method 
`TestMethodParameterTypeMono.Class1&lt;double&gt;.MethodB&lt;C&gt;()&#39;</font><br><br><br><br><font size="2">Note that the constraint on type parameter C on MethodB is to implement 
ICalculator&lt;double&gt;, which DoubleCalculator does, instead of 
ICalculator&lt;DoubleCalculator&gt; as the message suggests.</font><br><br><font size="2">Am I missing something or is it really a bug?</font> <font size="2">The separate class Program compiles fine in Visual Studio 2005 making the reference.
</font><br>&nbsp;<br><font size="2">Thanks, <br>Felipe Portella<br></font>