[Mono-bugs] [Bug 633108] New: The call is ambiguous between the following methods or properties, when passing method as parameter.

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Fri Aug 20 04:19:23 EDT 2010



           Summary: The call is ambiguous between the following methods or
                    properties, when passing method as parameter.
    Classification: Mono
           Product: Mono: Compilers
           Version: 2.6.x
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Major
          Priority: P5 - None
         Component: C#
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: cosmicvisitor at hotmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---

User-Agent:       Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-us)
AppleWebKit/533.17.8 (KHTML, like Gecko) Version/5.0.1 Safari/533.17.8

I have brought a .NET 2.0 project over from visual studio which uses delegates
and passes methods as parameters. I'm having trouble compiling it because when
passing a method as an argument, the compiler cannot infer the method signature
from the arguments used and as such does not distinguish between methods with
different signatures.

Assume this delegate:
    public delegate TResult Function<T, TResult>(T arg);

Example, given these two method overloads:

        public static bool ParseBool(string value)
            return ParseBool(value, "True", "False");

        public static bool ParseBool(string value, string trueValue = "true",
string falseValue = "false", StringComparison comparisonType =
            if(trueValue.Equals(value, comparisonType))
                return true;
                if(falseValue.Equals(value, comparisonType))
                    return false;

Now if you have another method as such:

       T TryCatchHelper<T>(Function<string, T> converter, string value)
                // attempt T to string conversion
                T result = converter(value);
                return result;
            catch(Exception e)
                // do stuff

In my original project (VS2010/.NET 2.0) this gets compiled:
bool result = TryCatchHelper(ParseBool, "true");

In Mono, it does not. First this creates a "Type cannot be inferred from usage"
because it cannot identify that the generic type T is a boolean. So if I do:
bool result = TryCatchHelper<bool>(ParseBool, "true");

Then I get that "The call is ambiguous between the following method or
properties" and it lists the two ParseBool methods. 

It would be great if you had a look and fix this in the next versions. For now
you have to workaround these problems. Thanks very much.

Reproducible: Always

Steps to Reproduce:
Please use code above

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