Ошибка «CS0123» при назначении функции событию, несмотря на точное совпадение сигнатуры метода с делегатом - PullRequest
0 голосов
/ 17 марта 2020

Работая с разногласиями. net, я написал следующий код для целей тестирования:

// Function I want to assign to the event
private static Task MessageRecieved(SocketMessage s, Task t)
{
    Console.WriteLine(s.ToString());
    return Task.CompletedTask;
}

static private DiscordSocketClient _client;

static async Task Main(string[] args)
{
    // skip initialization stuff

    _client.MessageReceived += MessageRecieved;

    // main loop goes here
}

Однако строка _client.MessageReceived += MessageRecieved; выдает мне эту ошибку:

CS0123 - нет перегрузки для 'MessageRectained' соответствует делегату 'Fun c (SocketMessage, Task)'

(круглые скобки - угловые скобки, просто форматирование StackOverflow не может показать это.) Несмотря на Дело в том, что сигнатура метода MessageRectained соответствует именно этим типам и имеет возвращаемое значение. Я также убедился, что это не относится к какой-либо другой функции. Кто-нибудь знает, что вызывает эту ошибку?

1 Ответ

1 голос
/ 17 марта 2020

Документация для этого обработчика событий гласит:

Обработчик события должен вернуть задачу и принять SocketMessage в качестве ее параметра.

Поэтому попробуйте удалить параметр Task t, который у вас есть, и он должен работать:

private static Task MessageRecieved(SocketMessage s)
{
    Console.WriteLine(s.ToString());
    return Task.CompletedTask;
}
...