方法重载与字符串和EventHandler参数之间的歧义

时间:2011-01-12 15:28:07

标签: c# overloading

我在使用重载方法时遇到了一些困难。我的签名看起来像这样:

void Register(object source, EventHandler mapped_handler)
void Register(object source, string mapped_property)

我试图像这样打电话给第一个:

Register(someObject, (s, e) => { ... });

Visual Studio 2008给了我error CS1503: Argument '2': cannot convert from 'System.EventHandler' to 'string'

我错过了什么?我不确定问题出在哪里。我有其他非重载方法,我可以将EventHandler lambdas传递给没有问题。

3 个答案:

答案 0 :(得分:2)

那应该是绝对正常的。简短而完整的例子:

using System;

public class Test
{
    static void Main(string[] args)
    {
        object o = new object();
        Register(o, (s, e) => {});
    }

    static void Register(object source, EventHandler handler)
    {
        Console.WriteLine("Handler");
    }

    static void Register(object source, string text)
    {
        Console.WriteLine("Text");
    }
}

如果您可以使用工作的类似简短但完整的示例来更新您的问题,我们可以提供进一步的帮助。 (我的猜测是,实际上在提出一个简短但完整的例子的过程中,你会发现问题。)

您的错误消息明确谈到EventHandler这一事实有点可疑 - 因为您的参数类型不是 EventHandler,它只是一个lambda表达式,它可以转换EventHandler。你确定错误发生在主叫线上吗?

答案 1 :(得分:0)

你需要这样做:

Register(someObject, new EventHandler((s,e)=>{...}));

答案 2 :(得分:0)

感谢所有的回复......结果证明这是我的方法声明中的一个问题。我的方法签名中的第一个参数的类型指定错误。我会把这个问题留给那些犯我这样愚蠢错误的人。