Неоднозначность между перегрузками методов с параметрами строки и EventHandler - PullRequest
1 голос
/ 12 января 2011

У меня возникли сложности с перегруженным методом. Мои подписи выглядят так:

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 лямбдам.

Ответы [ 3 ]

2 голосов
/ 12 января 2011

Это должно быть абсолютно нормально.Короткий, но полный пример:

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, это просто лямбда-выражение, которое можно преобразовать в EventHandler.Вы уверены, что ошибка на вызывающей линии?

0 голосов
/ 12 января 2011

Спасибо за все ответы ... оказывается, это было проблемой в моих объявлениях методов. У меня был неверный тип первого параметра в сигнатуре моего метода. Я оставлю этот вопрос для тех, кто делает глупые ошибки, как я.

0 голосов
/ 12 января 2011

Вам нужно сделать:

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