我在使用重载方法时遇到了一些困难。我的签名看起来像这样:
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传递给没有问题。
答案 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)
感谢所有的回复......结果证明这是我的方法声明中的一个问题。我的方法签名中的第一个参数的类型指定错误。我会把这个问题留给那些犯我这样愚蠢错误的人。