首页 > 解决方案 > 尽管方法签名与委托完全匹配,但将函数分配给事件时出现错误“CS0123”

问题描述

使用 discord.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 - 'MessageRecieved' 没有重载匹配委托 'Func(SocketMessage, Task)'

(括号是尖括号,只是 StackOverflow 格式无法显示。)尽管 MessageRecieved 的方法签名与这些类型完全匹配,并且有返回值。我还确保它不是指其他一些功能。有谁知道是什么导致了这个错误?

标签: c#eventsdelegatesdiscord.net

解决方案


此事件处理程序的文档指出:

事件处理程序必须返回一个 Task 并接受一个 SocketMessage 作为其参数。

因此,尝试删除Task t您当前拥有的参数,它应该可以工作:

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

推荐阅读