C# 对事件使用操作
我正试图根据以下说明实现一个简单的事件订阅: 在以下条件下编写在线考勤程序: 用户提供他们的姓名作为输入,然后应用程序显示消息“欢迎使用他们的姓名” 杰克、史蒂文和马修被禁止参加该组织。因此,当任何用户输入Jack、Steven和Mathew作为用户名时,应用程序应发出事件和火警警报,并向管理部门发送电子邮件 以下是我带来的:C# 对事件使用操作,c#,events,C#,Events,我正试图根据以下说明实现一个简单的事件订阅: 在以下条件下编写在线考勤程序: 用户提供他们的姓名作为输入,然后应用程序显示消息“欢迎使用他们的姓名” 杰克、史蒂文和马修被禁止参加该组织。因此,当任何用户输入Jack、Steven和Mathew作为用户名时,应用程序应发出事件和火警警报,并向管理部门发送电子邮件 以下是我带来的: using System; namespace EventPlay { class Program { static void Main
using System;
namespace EventPlay
{
class Program
{
static void Main(string[] args)
{
User user = new User();
user.bannedUser += OnBannedName();
user.newUser();
}
public void OnBannedName(string n)
{
Console.WriteLine("{0} Users Found. Sending Email to Administration.", n);
Console.WriteLine("Email Sent.");
Console.WriteLine("Warning Alarm Started.");
}
}
class User
{
public event Action<string> bannedUser;
public string Name;
public void newUser()
{
Console.WriteLine("Hello, What is your name ?");
Name = Console.ReadLine();
if ((Name == "Jack" || Name == "Steven" || Name == "Mathew"))
{
bannedUser(Name);
}
else
{
Console.WriteLine($"Hello {Name}!");
}
}
}
}
我遇到了以下错误,不明白为什么他们都无法更正我的代码
第10行
"Cannot implicitly convert type 'void' to 'System.Action<string>"
非常感谢您的帮助。当您使用括号时,表示您正在调用方法。方法调用返回值,因此在赋值中它使用方法返回的值,而您不希望使用该值 您需要的是分配方法本身,这是通过在不带括号的情况下写入方法名称来完成的,因此您的代码应该是:
user.bannedUser += OnBannedName;
您在该行OnBannedName上调用OnBannedName,而不是引用该函数。如果将函数名放在括号内,则相当于新建ActionOnBannedName,也就是说,将对OnBannedName委托的引用添加到事件中,而不是尝试添加从函数返回的内容。删除括号:user.bannedUser+=OnBannedName;。对于paranetheses,您调用函数而不是引用它。