c# - 尽管方法签名与委托完全匹配,但将函数分配给事件时出现错误“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 的方法签名与这些类型完全匹配,并且有返回值。我还确保它不是指其他一些功能。有谁知道是什么导致了这个错误?
解决方案
此事件处理程序的文档指出:
事件处理程序必须返回一个 Task 并接受一个 SocketMessage 作为其参数。
因此,尝试删除Task t
您当前拥有的参数,它应该可以工作:
private static Task MessageRecieved(SocketMessage s)
{
Console.WriteLine(s.ToString());
return Task.CompletedTask;
}
推荐阅读
- php - Error retrieving credentials from the instance profile metadata server with credentials defined in .aws folder
- python - MacOS Python Oracle TCPS connection with Oracle instant client - ORA-29024: Certificate validation failure
- swiftui - Selection color of a NavigationLink in List was different in Simulator and Device (SwiftUI)
- php - 如何创建函数 prev_id?
- python - PayPal SDK - AttributeError:“HttpResponse”对象没有属性“get”
- csv - 调用其他功能并从 csv 读取数据不在示例中
- variables - 如何在詹金斯声明性管道中为变量设置预定义的动态名称
- python - Django - 测试异步方法导致 psycopg2.InterfaceError:连接已关闭
- cplex - PyMathProg 读取 CPLEX lp 文件
- c# - 使用 Timer 和 Thread、股票应用程序更新 Winforms 标签