[Mono-bugs] [Bug 485378] New: Cannot resolve method overload

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Sat Mar 14 00:14:55 EDT 2009


           Summary: Cannot resolve method overload
    Classification: Mono
           Product: Mono: Compilers
           Version: 2.4.x
          Platform: i386
        OS/Version: Mac OS X 10.4
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: Chuck.Esterbrook at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---

User-Agent:       Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US;
rv: Gecko/2009021906 Firefox/3.0.7

Mono C# bug: overload resolution


This program is correct and compiles on .NET 3.5 and .NET 2.0.
It fails to compile on Mono 2.4 and 2.0 due to a false error.
I did not test Mono 2.2

The Mono C# compiler claims that an overload is ambiguous, but given that
MyCollection<T> inherits IMyCollection<T>, the compiler should favor the
overload that accepts that type.

This bug makes porting software from .NET to Mono difficult.

using System;
using System.Collections.Generic;

interface IMyCollection<T> : ICollection<T> {


class MyCollection<T> : IMyCollection<T> {

    public void AddRange(IMyCollection<T> items) {

    public void AddRange(IEnumerable<T> items) {

    // ---

    public int Count { get { return 0; } }

    public bool IsReadOnly { get { return false; } }

    public void Add(T item) { }

    public void Clear() { }

    public bool Contains(T item) { return false; }

    public void CopyTo(T[] a, int i) { }

    public bool Remove(T item) { return false; }

    public IEnumerator<T> GetEnumerator() { return null; }

System.Collections.IEnumerable.GetEnumerator() { return null; }


class P {

    static protected MyCollection<String> foo = new MyCollection<String>();

    static protected MyCollection<String> bar = new MyCollection<String>();

    static public MyCollection<String> IgnoreTokens {
        get {
            if (foo.Count == 0)
                foo.AddRange(bar);  // false error on Mono 2.0 and 2.4: The
call is ambiguous between...
            return foo;

    public static void Main() {


Reproducible: Always

Steps to Reproduce:
1. Compile the above program with gmcs

Actual Results:  
False compilation error:

error CS0121: The call is ambiguous between the following methods or
and `MyCollection<string>.AddRange(IMyCollection<string>)'

Expected Results:  
No compilation errors like on .NET.

This may be related to https://bugzilla.novell.com/show_bug.cgi?id=444388

I cannot tell if these are the actual same bug or just in the same area. At the
very least, the program submitted with this bug report makes a nice additional
test case involving generics and method arguments.

Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the mono-bugs mailing list