我正在尝试根据以下说明实施简单的事件订阅:
编写具有以下条件的在线出勤程序:
用户提供他们的姓名作为输入,然后应用程序显示消息以“欢迎使用他们的姓名”。
Jack,Steven和Mathew被禁止加入该组织。因此,当任何用户输入用户名Jack,Steven和Mathew作为用户名时,应用程序都应该引发事件和火灾警报,并向管理人员发送电子邮件。
这是我随附的内容:
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>"
感谢您的帮助。
答案 0 :(得分:1)
使用括号时,表示正在调用方法。方法调用返回值,因此在赋值中,它使用该方法返回的值,这是您不需要的。
您想要的是分配方法本身,这是通过在不带括号的情况下编写方法名称来完成的,因此您的代码应为:
user.bannedUser += OnBannedName;