我有以下内容EventHandler,我添加了一个参数MusicNote音乐:
public void PlayMusicEvent(object sender, EventArgs e,MusicNote music)
{
music.player.Stop();
System.Timers.Timer myTimer = (System.Timers.Timer)sender;
myTimer.Stop();
}
Run Code Online (Sandbox Code Playgroud)
我需要将处理程序添加到Timer类似的内容中:
myTimer.Elapsed += new ElapsedEventHandler(PlayMusicEvent(this, e, musicNote));
Run Code Online (Sandbox Code Playgroud)
但得到错误:
"方法名称预期"
编辑:在这种情况下,我只是从包含此代码片段的方法传递e,我将如何传递计时器自己的EventArgs?
我正在连接一个事件以使用一个lambda,它需要在触发后自行移除.我无法通过将lambda内联到+ =事件(没有用于删除事件的可访问变量)来做到这一点,所以我设置了一个Action<object, EventArgs>变量并将lambda移动到那里.主要错误是它无法将其转换Action<object, EventArgs>为EventHandler.我认为lambda表达式可以隐式转换为事件处理程序,为什么这不起作用?
可能重复:
C#为什么不能将匿名方法分配给var?
我在c#中有以下声明
Func <int, int, int> add = (x, y) => x + y;
Run Code Online (Sandbox Code Playgroud)
但是当我用以下代替左手边的声明时
var add = (x, y) => x + y;
Run Code Online (Sandbox Code Playgroud)
我收到编译错误(无法将lambda表达式赋值给隐式类型的局部变量).为什么?
我在我的代码中使用匿名委托调用此示例函数:
public static int TestFunction(int a, int b) {
return a + b;
}
Run Code Online (Sandbox Code Playgroud)
代表看起来像这样:
var del = new Func<int, int, int>(TestFunction);
Run Code Online (Sandbox Code Playgroud)
我的问题是:你如何指定一个void返回类型TResult?以下不起作用:
public static void OtherFunction(int a, string b) { ... }
var del = new Func<int, string, void>(OtherFunction);
Run Code Online (Sandbox Code Playgroud)